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/