次の関数を指定すると、警告が表示されます。
警告ネストのプロミスを回避する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();
});
});
});
}
別のプロミスのthen()
内に入れ子になったpromise then()
呼び出しがあります。これは不適切なスタイルと見なされ、コードが読みにくくなります。実行する一連の作業がある場合は、別の作業をネストするinsideよりも、作業を後にチェーンする方が適切です。したがって、このようにネストする代わりに:
doSomeWork()
.then(results1 => {
return doMoreWork()
.then(results2 => {
return doFinalWork()
})
})
次のように作業をシーケンスします。
doSomeWork
.then(results => {
return doMoreWork()
})
.then(results => {
return doFinalWork()
})
そのエラーメッセージを検索すると この役立つディスカッション も得られます。