gpt4 book ai didi

node.js - 在 map 中使用多个等待

转载 作者:太空宇宙 更新时间:2023-11-04 01:20:02 25 4
gpt4 key购买 nike

我对下面的代码有点困惑。

 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 = wait book.fetchA(bookingID)之后时,它总是得到相同的id?

最佳答案

即使 Node.js 是单线程的,Promise.all 也不会阻塞,如果一个 Promise 等待结果,因此当第一个 Promise 等待 AData = wait book.fetchA(bookingID); 时,另一个 Promise 会继续调用 console.log 并再次等待,因此最终结果是

###############################
###############################
2918849262429175808
2918849262429175808
==============================
==============================

对于第二种情况也可以进行类似的论证。调用 Promise.all

时仅保留返回值的顺序

关于node.js - 在 map 中使用多个等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59623106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com