我有以下代码。我期待输出:START,Middle,Middle,END
但相反,我得到了这个START,Middle,END,Middle
(在我的例子中,FYI价格数组有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);
});
});