gpt4 book ai didi

node.js - forEach 完成后需要发送响应

转载 作者:可可西里 更新时间:2023-11-01 09:20:45 24 4
gpt4 key购买 nike

我正在使用 NodeJS + Mongoose,我试图填充一个对象数组,然后将其发送到客户端,但我做不到,响应始终为空,因为它是在 forEach 结束之前发送的。

router.get('/', isAuthenticated, function(req, res) {
Order.find({ seller: req.session.passport.user }, function(err, orders) {
//handle error
var response = [];
orders.forEach(function(doc) {
doc.populate('customer', function(err, order) {
//handle error
response.push(order);
});
});
res.json(response);
});
});

有没有办法在循环结束后发送?

最佳答案

基本上,您可以使用任何解决方案来进行异步控制流管理,例如 async或 promise (有关详细信息,请参阅 laggingreflex's answer),但我建议您使用专门的 Mongoose 方法在一个 MongoDB 查询中填充整个数组。

最直接的解决方案是使用 Query#populate method获取已经填充的文档:

Order.find({
seller: req.session.passport.user
}).populate('customer').exec(function(err, orders) {
//handle error
res.json(orders);
});

但是,如果由于某种原因,你不能使用这个方法,你可以调用 Model.populate method自己填充一组已经获取的文档:

Order.populate(orders, [{
path: 'customer'
}], function(err, populated) {
// ...
});

关于node.js - forEach 完成后需要发送响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30832743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com