node.js - 在地图中使用多个等待
问题描述
我对下面的代码有点困惑。
let bookingID
result = await Promise.all(result.map(async (item) => {
bookingID = item.id;
console.log('###############################');
AData = await book.fetchA(bookingID);
console.log(bookingID);
BData = await book.fetchB(bookingID);
console.log('==============================');
return {
'AData ': AData ,
'BData ': BData ,
'id': bookingID
};
}));
我在控制台中得到的是:(注意。id 是一样的。总是最后一个)
###############################
###############################
2918849262429175808
2918849262429175808
==============================
==============================
循环逻辑似乎有问题,输出应该是
###############################
2918849262429175807
==============================
###############################
2918849262429175808
==============================
但是,如果我将 console.log 的顺序更改为
console.log('###############################');
console.log(bookingID);
AData = await book.fetchA(bookingID);
BData = await book.fetchB(bookingID);
console.log('==============================');
输出是(注意。id 不同)
###############################
2918849262429175807
###############################
2918849262429175808
==============================
==============================
我完全糊涂了。8-(
随便找个有意思的。当我使用 console.log(item.id) 而不是 console.log(bookingID) 时,它可以获得正确的 id 结果。“bookingID = item.id”是怎么回事?为什么 console.log(bookingID) 在 AData = await book.fetchA(bookingID) 之后总是得到相同的 id?
解决方案
即使 Node.js 是单线程的,如果一个等待结果 Promise.all
也不会阻塞,所以当第一个承诺等待另一个承诺时,会继续调用并再次等待,所以最终结果是Promise
AData = await book.fetchA(bookingID);
console.log
###############################
###############################
2918849262429175808
2918849262429175808
==============================
==============================
第二种情况也可以提出类似的论点。在调用时只保留返回值的顺序Promise.all
推荐阅读
- image - 如何在处理中打印图像
- python - Python 使用 For 循环在列表中查找偶数,然后将它们乘以 2
- youtube-api - Youtube API 频道搜索跳过列表中的视频
- javascript - 如何解决平板电脑无法正确显示的 col-md 问题
- python - 绘制故障模式图
- angular - 自定义错误处理 Angular:抛出特定错误
- c# - WCF:无法使用安全绑定导入 WSDL
- scala - 用地图值替换自定义对象列表中的值
- image - 如何将 Reality Composer (RealityKit) 场景锚定到检测到的图像
- javascript - db.getConnection 不是函数