node.js - NodeJs - 异步/等待内部的异步/等待

标签 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);

最佳答案

将内部 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/

相关文章:

javascript - http请求文件头

node.js - 在为全局 const 变量赋值时使用 Async/await

rust - 如何等待一个盒装 future 的结果?

javascript - 检测 Javascript/ECMAScript 等待滥用?

c# - 获取任务并将其传递的方法是否应该等待它?

python - 使用套接字(NodeJS,Socket.io)将数据从 Python 发送到 Node 服务器

javascript - Node.js——请帮我递归

node.js - Mongoose 如何从填充中排除_id

node.js - 如何将http重定向到https

c# - 从 C# 中的多个异步方法(即线程)增加值类型