gpt4 book ai didi

javascript - Node.js foreach + promise

转载 作者:行者123 更新时间:2023-11-30 14:38:31 25 4
gpt4 key购买 nike

我想像下面这样打印 arr=[1, 2, 3, 4]

11012个1023个1034个104

但结果如下。

12个3个4个101102103104

我的代码

var arr = [1, 2, 3, 4];


var promises = [];
arr.forEach(function(elem){
print(elem)
.then(addAndPrint)
}
)

function print(elem){
return new Promise(function(resolve, reject){
console.log(elem);
resolve(elem);
});
}
function addAndPrint(elem){
console.log(elem + 100);
}

我怎样才能得到我想要的结果?

最佳答案

.then 执行异步(类似于setTimeout(.., 0))(即使 promise 立即解析),而new Promise((res, rej) => { 中的 promise 创建函数同步运行。因此,如果您同步 创建一堆 promise,例如 forEach 在主线程结束之前,这些 promises block 将在 任何 then 到达之前立即运行。

使用 awaitreducefor..of 确保迭代连续运行,而不是并行:

var arr = [1, 2, 3, 4];


var promises = [];
arr.reduce(async function(lastPromise, elem) {
await lastPromise;
return print(elem)
.then(addAndPrint)
}, Promise.resolve())

function print(elem) {
return new Promise(function(resolve, reject) {
console.log(elem);
resolve(elem);
});
}

function addAndPrint(elem) {
console.log(elem + 100);
}

关于javascript - Node.js foreach + promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50054663/

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