NodeJs - 在async / await中异步/等待

问题描述 投票:3回答:1

我有以下代码。我期待输出: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);
node.js async-await
1个回答
3
投票

将内部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);
  });
});
© www.soinside.com 2019 - 2024. All rights reserved.