【发布时间】:2020-08-04 10:21:10
【问题描述】:
如何等到data 填充到finalresult 之后再继续?
我尝试了 async 和 await 但没有按预期工作,最重要的是我是 nodejs express 的新手
exports.getporderlist = (req, res) => {
page = req.params.page || "1";
skip = (page - 1) * 10;
if (req.profile.role.includes(1)) {
Order.find({ status: { $in: [0, 2] } })
.select("_id updatedAt items salesman")
.populate("customer", "customer_name phone")
.sort({ updatedAt: -1 })
.skip(skip)
.limit(10)
.exec((err, orders) => {
if (err) {
return res.status(400).json({
error: "No Orders found",
});
}
let finalresult = [];
orders.forEach((oelement) => {
total = 0;
salesman = oelement.salesman.split(" ")[0];
itemscount = oelement.items.length;
placeorder = true;
oelement.items.forEach((element) => {
total += element.price * element.quantity;
});
//Wait for the bellow data variable to finish populating finalresult
const data = Design.find()
.select("_id sm lm")
.where("_id")
.in(oelement.items)
.exec((err, orders) => {
finalresult.push(orders);
console.log(orders);
});
});
console.log(1);
res.json(finalresult);//getting empty finalresult array on call
});
} else {
res.json({ Message: "Go away" });
}
};
【问题讨论】:
-
我不知道 Mongoose,
.exec(...)会返回一个承诺吗? -
@sp00m umm 然后我们可以像
Design.find() .select("_id sm lm") .where("_id") .in(oelement.items) .exec((err, orders) => { finalresult.push(orders); console.log(orders); });一样使用它,然后它也不会填充发送给用户的最终结果 -
@sp00m 我不太确定它返回的承诺有点与这部分混淆:(
-
最好的通常是查看文档:mongoosejs.com/docs/api.html#query_Query-exec ;)
-
所以我猜你必须和
Promise#all一起玩。你能清理你的代码以便更容易提供帮助吗?例如,我可以看到许多未使用或未声明的变量,它确实会污染读数。
标签: node.js express async-await