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 .