Mic*_*lis 5 node.js async-await
我有以下代码。我希望输出: 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);
Run Code Online (Sandbox Code Playgroud)
将内部更改await为return语句,否则prices.map()将生成一个条目数组,undefined而不是承诺。
由于Transport#save()不返回承诺,您需要用Promise构造函数包装它,因为它是回调样式的 API,或者参考可能解释如何改为返回承诺的文档。
要包装它,您可以执行以下操作:
// ...
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);
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5423 次 |
| 最近记录: |