web-dev-qa-db-ja.com

Google Cloud Functions-警告ネストのプロミスを回避するpromise / no-nesting

次の関数を指定すると、警告が表示されます。

警告ネストのプロミスを回避するpromise/no-nesting(6行目)

警告を修正するには、関数を再構築する方法を教えてください。

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

別のプロミスのthen()内に入れ子になったpromise then()呼び出しがあります。これは不適切なスタイルと見なされ、コードが読みにくくなります。実行する一連の作業がある場合は、別の作業をネストするinsideよりも、作業をにチェーンする方が適切です。したがって、このようにネストする代わりに:

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

次のように作業をシーケンスします。

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

そのエラーメッセージを検索すると この役立つディスカッション も得られます。

27
Doug Stevenson