如何优雅地将承诺上的长链更改为在typescript中并行?
原始代码如下所示:如何优雅地将承诺上的长链更改为在typescript中并行?,typescript,Typescript,原始代码如下所示: new Promise<void>((resolve) => { resolve(); }) .then(() => { return 1; }) .then((res1) => { return res1 + 1; }) .then((res2) => { return res2 + 1 }) .then((res3) => { return res3 + 1 }) . .then((sum)
new Promise<void>((resolve) => {
resolve();
})
.then(() => {
return 1;
})
.then((res1) => {
return res1 + 1;
})
.then((res2) => {
return res2 + 1
})
.then((res3) => {
return res3 + 1
})
.
.then((sum) => {
console.log("I am the end! the sum is " + sum);
})
新承诺((解决)=>{
解决();
})
.然后(()=>{
返回1;
})
。然后((res1)=>{
返回res1+1;
})
。然后((res2)=>{
返回res2+1
})
。然后((res3)=>{
返回res3+1
})
.
。然后((总和)=>{
log(“我结束了!总和是”+sum);
})
但是代码越来越长,所以我想使用Promise.all()
;因此,程序应该是:
如果我使用
Promise.all()
,我必须传递一个承诺数组吗?这里有一种方法,使用Promise.all()
等待所有计算,然后使用array.reduce()
将所有结果相加
const originalPromise=新承诺(resolve=>resolve());
const firstCalculation=新承诺(resolve=>resolve(1));
const secondCalculation=新承诺(resolve=>resolve(2));
const thirdCalculation=新承诺(resolve=>resolve(3));
const fourthCalculation=新承诺(resolve=>resolve(4));
我保证([
第一次计算,
第二次计算,
第三次计算,
第四次计算
])。然后(结果=>{
常数和=结果。减少((acc,电流)=>acc+=电流,0);
log(`sum是${sum}`);
});
这里有一种方法,使用Promise.all()
等待所有计算,然后使用Array.reduce()
将所有结果相加为一个总和
const originalPromise=新承诺(resolve=>resolve());
const firstCalculation=新承诺(resolve=>resolve(1));
const secondCalculation=新承诺(resolve=>resolve(2));
const thirdCalculation=新承诺(resolve=>resolve(3));
const fourthCalculation=新承诺(resolve=>resolve(4));
我保证([
第一次计算,
第二次计算,
第三次计算,
第四次计算
])。然后(结果=>{
常数和=结果。减少((acc,电流)=>acc+=电流,0);
log(`sum是${sum}`);
});
目前尚不清楚如何承诺。当本例依赖于承诺按顺序解决时,所有的都会有所帮助,要求先解决前一个承诺,然后才能解决当前承诺。考虑使用ASYNC/Access来简化这段代码。@斯宾德,你说得对,绝对不是一个好例子。但我想表达的是,顺序并不重要,因为结果是一样的。不清楚如何承诺。当本例依赖于承诺按顺序解决时,所有的都会有所帮助,要求先解决前一个承诺,然后再解决当前承诺。考虑使用ASYNC/Access来简化这段代码。@斯宾德,你说得对,绝对不是一个好例子。但是我想表达的是,序列并不重要,因为结果是一样的。因为在开始的时候,每个阶段都会返回一个数组,所以每次我只是简单地添加它。但是现在返回类型很奇怪(不再是平面数组了)。。我怎样才能将它们展平?@Michael只需在之前添加.flatMap(it=>it)
。减少
@Minami谢谢!我发现,[].concat(…a,…b)
也能工作。嗨@Yanick bélanger,我用这种方法遇到了一个问题。因为在开始的时候,每个阶段都会返回一个数组,所以每次我只是简单地添加它。但是现在返回类型很奇怪(不再是平面数组了)。。我怎样才能将它们展平?@Michael只需在之前添加.flatMap(it=>it)
。减少
@Minami谢谢!我发现,[].concat(…a,…b)
也能工作。