firebase firebase-realtime-database google-cloud-functions

firebase - Funciones de Google Cloud: advertencia Evitar promesas de anidamiento promesa/no anidamiento



firebase-realtime-database google-cloud-functions (1)

Dada la siguiente función, recibo la advertencia:

advertencia Evitar promesas de anidación promesa / no anidación (línea 6)

¿Cómo debo reestructurar la función para corregir la advertencia?

function FindNearbyJobs(uid, lat, lng){ return admin.database().ref(`users/${uid}/nearbyjobs`).remove().then(data => { return new Promise((resolve, reject) => { const geoQueryJobs = geoFireJobs.query({center: [lat, lng], radius: 3 }); geoQueryJobs.on("key_entered", (key, location, distance) => { return Promise.all([admin.database().ref(`jobs/${key}/category`).once(''value''), admin.database().ref(`users/${uid}/account/c`).once(''value'')]).then(r => { const cP = r[0]; const cO = r[1]; if (cO.val().includes(cP.val())){ return admin.database().ref(`users/${uid}/nearbyjobs/${key}`).set({ d: distance }); }else{ return null; } }); }); geoQueryJobs.on("ready", () => { resolve(); }); }); }); }


Tiene una promesa, then() llamada anidada dentro de otra promesa de then() . Esto se considera un estilo pobre y hace que su código sea difícil de leer. Si tiene una secuencia de trabajo que realizar, es mejor encadenar su trabajo uno tras otro en lugar de anidar uno dentro de otro. Entonces, en lugar de anidar así:

doSomeWork() .then(results1 => { return doMoreWork() .then(results2 => { return doFinalWork() }) })

Secuencia el trabajo de esta manera:

doSomeWork .then(results => { return doMoreWork() }) .then(results => { return doFinalWork() })

Buscar ese mensaje de error también genera esta útil discusión .