【发布时间】:2020-12-18 22:28:15
【问题描述】:
我已经删除了正在工作的错误处理代码(为了简单起见)。
我有一个函数 createOrder() 在我的 MongoDB 集合中创建一条新记录:
createOrder = order => new Promise((resolve, reject) => {
Order.create({orderId: order});
resolve();
});
getOrders() 函数将数据库中的所有当前订单添加到数组中。
getOrders = _ => new Promise((resolve, reject) => {
Order.find({buyerId: curUser.userId}, (err, orders) => {
orders.map(order => order.status != 'cancelled' ? curUserOrders.push(order) : null);
});
resolve();
});
用于发布订单的外部 javascript 文件:
postOrder = () => {
window.location = `/new_order/order=${JSON.stringify(itemArray)}`;
}
以及“获取”请求的节点应用程序:
app.get("/new_order/order=:order", (req, res) => {
createOrder(JSON.parse(req.params.order))
.then(getOrders)
.then(_ => res.render("userprofile", {user : curUser, orders: curUserOrders}));
});
当我发布新订单时,postOrder() 函数被触发并显示"userprofile",但在我再次刷新页面之前没有显示任何订单。我还在学习承诺是如何工作的,所以我猜测问题就在那里。请帮忙:)。
【问题讨论】:
-
将 resolve() 放入 Order.create() 和 Order.find() 中。这两个都是异步的,你的承诺会立即得到解决。
-
另外不要忘记在resolve()中传递数据,以便在promise解决后接收。
-
谢谢你我现在明白了:)
标签: javascript node.js mongodb express promise