web-dev-qa-db-fra.com

Fonctions Google Cloud - avertissement Évitez les promesses d'imbrication promesse / non-imbrication

É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();
      });
    });
  });
}
16
Diego P

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 .

27
Doug Stevenson