Javascript 如何避免在IF语句中嵌套承诺
我知道我们不应该在函数中嵌套承诺,我的所有函数都没有任何嵌套,但是我不知道如何避免在我的函数中的if-else语句中嵌套承诺Javascript 如何避免在IF语句中嵌套承诺,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我知道我们不应该在函数中嵌套承诺,我的所有函数都没有任何嵌套,但是我不知道如何避免在我的函数中的if-else语句中嵌套承诺 const staffRef = db.collection("staff").doc(uid) return staffRef.get() .then((doc) => { if (doc.exists) { return staffRe
const staffRef = db.collection("staff").doc(uid)
return staffRef.get()
.then((doc) => {
if (doc.exists) {
return staffRef.delete()
.then(() => {
console.log("Employee ", uid, " profile has been deleted in staff collection")
return null
})
} else {
console.log("Employee ", uid, " had no dependencies")
return null
}
})
我不认为这是嵌套,但在部署时仍会收到警告。我应该如何重新构造此代码以避免嵌套警告?我知道有一些类似的答案,但没有一个有if-else语句您可以抛出一个错误并捕获它,如下所示:
const staffRef = db.collection("staff").doc(uid)
return staffRef.get()
.then((doc) => {
if (doc.exists) {
return staffRef.delete();
} else {
console.log("Employee ", uid, " had no dependencies")
throw new Error("Employee " + uid + " had no dependencies");
}
})
.then(() => {
console.log("Employee ", uid, " profile has been deleted in staff collection");
return null;
})
.catch(error => {
console.log(error);
return null;
});
只有一个后续问题。。。如果我们不想纠正错误,我们真的不需要抛出并捕获任何错误?如果doc不存在,这段代码会在日志中添加两条相同的消息吗?@ptr.chov使用这种方法,您需要抛出一个错误以避免嵌套承诺。如果不需要最后两个
console.log()
s,则可以抑制最后一个then()
和catch()
。云功能平台将自行“管理”错误..是。。我就是这样改变的。很抱歉,我不得不删除我的代码,因为我不知道如何在此处设置注释中的代码格式:)基本上,如果我考虑一下,如果该文档不存在,我们将始终获得该员工已被删除的日志,但对于另一个日志,员工没有依赖关系。我已经删除了last.then和.catch,并简单地将关于员工的日志删除,然后返回staff.delete()。即使发生错误,我也会得到不一致的日志(已删除,然后是错误日志)