[英]Why this Map method within Promise.all won't work correctly with MongoDB and Monk in Node.js?
我在Mongo数据库中有订单数据。 我在同一数据库中也有产品信息,因此需要将它们结合起来。
如果订单有多个产品,则需要为每个产品创建订单的副本。 因此,如果我对某商品有一个订单,那么会有两个相同的订单,每个商品中都有其中一个。 (数据将以CSV格式提交以提供服务,它将不能在一行数据上接受多个产品)
问题是,当我尝试从Monk的Mongo数据库中获取每个订单的产品数据时,只有带有多个项目的每个订单的一个版本才通过CSV传递。
一切都顺利进行到decorateProducts函数,这似乎导致订单丢失。 JSON数组在此之前看起来还不错,但在此之后缺少订单。
以下是相关代码:
...
const decorateProducts = (order) => {
if (typeof order[0] !== 'undefined' && order[0] !== null) {
var prodId = order[0].productId;
return collectionProducts.findOne({"_id": prodId})
.then(currentProduct => {
if (currentProduct) {
var obj = {
"email" : order[0].email,
"firstName" : order[0].firstName,
"lastName" : order[0].lastName,
"location" : order[0].location,
"orderNumber" : order[0].orderNumber,
"orderId" : order[0].orderNumber,
"orderDate" : order[0].orderDate,
"productId" : order[0].productId,
"productTitle" : currentProduct["productTitle"],
"productImageUrl" : currentProduct["productImageUrl"],
"productUrl" : currentProduct["productUrl"]
}
}
else { obj = ""; }
return obj;
})
.catch(err => console.log(err));
}
};
...
collectionOrders.find({})
.then(orders => Promise.all(orders.map(order => processOrder(order))))
.then(orders => Promise.all(orders.map(order => decorateProducts(order))))
.then(orders => writeCsv(orders))
.then(output => res.send(output))
.catch(err => console.log(err));
任何帮助,将不胜感激。
这是因为在decorateProducts
内部,您正在返回一个对象。 尝试返回一个Promise
以便该对象仍可修复。
const decorateProducts = (order) => {
if (typeof order[0] !== 'undefined' && order[0] !== null) {
var prodId = order[0].productId;
return collectionProducts.findOne({"_id": prodId})
.then(currentProduct => {
if (currentProduct) {
var obj = { /* stuff */ }
}
else { obj = ""; }
return Promise.resolve(obj);
})
.catch(err => console.log(err));
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.