Javascript 如何避免在IF语句中嵌套承诺

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

我知道我们不应该在函数中嵌套承诺,我的所有函数都没有任何嵌套,但是我不知道如何避免在我的函数中的if-else语句中嵌套承诺

        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()。即使发生错误,我也会得到不一致的日志(已删除,然后是错误日志)