我有以下代码。我期望输出:START,Middle,Middle,END
但我得到的是 START,Middle,END,Middle
(仅供引用,价格数组在我的示例中有 2 个值)
console.log("START");
await Promise.all(prices.map(async(price) => {
let obj: any = {};
obj.normal = price.normal;
await new Transport(obj).save(async (err: any, doc: any) => {
console.log("Middle");
price.transport_id = doc._id;
});
}));
console.log("END");
console.log(prices);
最佳答案
将内部 await
更改为 return
语句,否则 prices.map()
生成的条目数组是 undefined
而不是 promises.
由于 Transport#save()
不返回 promise ,您需要用 Promise
构造函数包装它,因为它是回调式 API,或者请参阅可能解释如何返回 promise 的文档。
要包装它,您可以这样做:
// ...
obj.normal = price.normal;
return new Promise((resolve, reject) => {
new Transport(obj).save((err: any, doc: any) => {
console.log('Middle');
if (err) return reject(err);
price.transport_id = doc._id;
resolve(price);
});
});
关于node.js - NodeJs - 异步/等待内部的异步/等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47998196/