NodeJs-异步/等待内的异步/等待

米哈利斯

我有以下代码。我希望输出: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);
帕特里克·罗伯茨

将内部更改awaitreturn语句,否则prices.map()将生成undefined代替promise的条目数组

由于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);
  });
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章