NodeJs - 异步/待机异步/等待

我有以下代码。我期望的输出:开始,中间,中间,结束NodeJs - 异步/待机异步/等待

,而是我得到这个开始,中间,结尾,中间

(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而不是承诺的条目数组。

因为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);

});

});

以上是 NodeJs - 异步/待机异步/等待 的全部内容, 来源链接: utcz.com/qa/267373.html

回到顶部