gpt4 book ai didi

javascript - Promise.all 中的链式 promise ,没有包装器 Promise

转载 作者:行者123 更新时间:2023-11-30 08:20:38 29 4
gpt4 key购买 nike

Promise.all 是否可以在没有包装 promise 的情况下返回链的最后一个值?

如果不使用 await,它在我的上下文中不起作用

没有包装的例子:

function sum1(x){
return new Promise(resolve => {
setTimeout(t => resolve(x+1),3000)
})
}
const p1 = sum1(1);

p1
.then(sum1)
.then(sum1)

Promise.all([p1])
.then(v => console.log(v[0]));

它记录了 2 而不是预期的 4。

但是如果我使用包装器它会起作用:

function sum1(x){
return new Promise(resolve => {
setTimeout(t => resolve(x+1),3000)
})
}

function sum3(x){
return sum1(x)
.then(sum1)
.then(sum1)
}
const p2 = sum3(1);

Promise.all([p2])
.then(v => console.log(v[0]));

但在我的上下文中,如果我需要为每个 promise 链创建和命名一个包装函数,事情就会变得复杂......

这可能吗?

最佳答案

您可以存储 p1.then(sum1).then(sum1) 返回的值,并对该值调用 Promise.all。它不仅等待第一个 promise 链的解析。这是一个例子:

function sum1(x) {
return new Promise(resolve => {
setTimeout(t => resolve(x + 1), 10);
});
}

const p1 = sum1(1);
const p2 = p1.then(sum1).then(sum1);

Promise.all([p1]).then(v => console.log('P1', v[0]));
Promise.all([p2]).then(v => console.log('P2', v[0]));

关于javascript - Promise.all 中的链式 promise ,没有包装器 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54181083/

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