Die*_*o P 12 firebase firebase-realtime-database google-cloud-functions
鉴于以下功能,我收到警告:
警告避免嵌套承诺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();
});
});
});
}
Run Code Online (Sandbox Code Playgroud)
Dou*_*son 29
你有一个承诺then()调用嵌套在另一个承诺的内部then().这被认为是糟糕的风格,并使您的代码难以阅读.如果你要完成一系列的工作,最好一个接一个地链接你的工作,而不是将一个嵌套在另一个工作中.所以,而不是像这样嵌套:
doSomeWork()
.then(results1 => {
return doMoreWork()
.then(results2 => {
return doFinalWork()
})
})
Run Code Online (Sandbox Code Playgroud)
像这样对作品进行排序:
doSomeWork
.then(results => {
return doMoreWork()
})
.then(results => {
return doFinalWork()
})
Run Code Online (Sandbox Code Playgroud)
搜索该错误消息也会产生这种有用的讨论.
| 归档时间: |
|
| 查看次数: |
3600 次 |
| 最近记录: |