【发布时间】:2019-02-22 14:49:42
【问题描述】:
我尝试链接几个顺序执行的 then 函数,但最后一个 .then() 是在前一个完成执行之前执行的,因此它发送一个空的有效负载。以下是sn-p:
router.get("/selectedHotels", function(req, res) {
let payload = [];
return collectionRef
.where("isOwner", "==", true)
.get() //fetches owners
.then(snapshot => {
snapshot.forEach(user => {
console.log("User", user);
collectionRef
.doc(user.id)
.collection("venues")
.get() // fetches hotels from owners
.then(snapshot => {
snapshot.forEach(doc => {
if (
doc.data().location.long == req.query.long &&
doc.data().location.lat == req.query.lat
) {
console.log(doc.id, "=>", doc.data());
payload.push({
id: doc.id,
data: doc.data()
});
}
});
})
.catch(err => {
console.log("No hotels of this user", err);
});
});
})
.then(() => {
console.log("Payload", payload);
response(res, 200, "Okay", payload, "Selected hotels");
})
.catch(err => {
console.log("Error getting documents", err);
response(res, 404, "Data not found", null, "No data available");
});
});
有什么建议吗?谢谢
【问题讨论】:
-
第一个 then 的内部没有返回 Promise,您正在迭代快照并且什么也不返回。
-
在这种情况下为什么需要两个外部 then()?
-
@nem035:为什么要编辑?它的可读性很强。
-
@ScottSauyet 我 prettified 代码
-
@nem035:我认为在开始时代码的格式合理时不合适。原始格式也不符合我的喜好,但这不是重点。
标签: javascript node.js firebase promise es6-promise