问题描述
我的代码中有以下内容。我试图阻止用户对某人进行两次审查,因此它应该停止执行 IF 语句中的代码并结束 firebase 调用。
但是,它会继续执行其余的“.then”语句。我尝试将其更改为 end() 但这也不起作用。我做错了什么?
exports.reviewUser = (req,res) => {
db.collection("users")
.doc("user")
.get()
.then((doc) => {
if (doc.exists) {
return res
.status(400)
.json({ error: "You cannot review someone twice." })
.send();
}
})
.then(() => {
//Additional functions
})
.then(() => {
//Additional functions
})
}
更新:
我遵循了答案,这是我编辑过的代码,以供将来参考。
exports.reviewUser = async(req,res) => {
let existingReview = await checkReviewExists(userid);
if (existingReview) {
return res
.status(400)
.json({ error: "You cannot review someone twice." })
.end();
}
db.collection("users")
.doc("user")
.then(() => {
//Additional functions
})
.then(() => {
//Additional functions
})
}
function checkReviewExists(id1) {
return db
db.collection("users")
.doc(id1)
.get()
.then((doc) => {
if (doc.exists) {
console.log("cannot review twice");
return true;
}
else
return false;
});
}
解决方法
根据 Firebase 文档,我们可以使用 send(),redirect(),or end()
结束 HTTP 函数。但是,在您的情况下,您正在使用多个 Promise
解析 Firestore .then()
。所以在这里,虽然第一个返回,但它转到第二个 then()
上述参考提供了详细信息和示例。我更喜欢使用一个 .then()
或者只是 async / await 来完成这项工作。