Étant donné la fonction suivante, je reçois l'avertissement:
avertissement Évitez les promesses de nidification promesse/non-nidification (ligne 6)
Comment dois-je rétablir la fonction pour corriger l'avertissement?
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();
});
});
});
}
Vous avez un appel de promesse then()
imbriqué dans une autre promesse then()
. Ceci est considéré comme un style médiocre et rend votre code difficile à lire. Si vous avez une séquence de travail à effectuer, il est préférable d'enchaîner votre travail un après un autre plutôt que d'en imbriquer un à l'intérieur un autre. Donc, au lieu d'imbriquer comme ceci:
doSomeWork()
.then(results1 => {
return doMoreWork()
.then(results2 => {
return doFinalWork()
})
})
Séquencez le travail comme ceci:
doSomeWork
.then(results => {
return doMoreWork()
})
.then(results => {
return doFinalWork()
})
La recherche de ce message d'erreur donne également cette discussion utile .