在使用 setTimeout 实现承诺并并行运行它们时遇到问题



我正在尝试编写一个返回异步承诺的函数。使用 100ms 的setTimeout来模拟承诺解析,除了 G(其中一个承诺(它setTimeout是 200ms。每个步骤都是单独的异步承诺。

我希望每个承诺在上一步完成后开始。 所有承诺都会将其名称和收入参数记录到控制台,并为下一个承诺提供名称。 基本流程 : a -> (b + c + d( -> e -> f -> h -> i -> j '->克 ->/

这里: (b+c+d( - 表示 3 个承诺应该并行运行 "我"等待G和H。 每个上一个任务的结果应提供给下一个任务。

var promise = new Promise(function(resolve, reject)) {
setTimeout(resolve, 100);
});
Promise.all([promise.resolve(a), promise.resolve(b+c+d), promise.resolve(e), promise.resolve(f), promise.resolve(g)...]).then(function(values) {
console.log(values);
});

如果您希望一个承诺接resolve另一个承诺,请使用.then()链接它们。如果您希望并行resolve一些承诺,请使用Promise.all()

/**
* promiseGenerator: will generate a new promise which will resolve after <time> ms
* time: time in milliseconds
* */
function promiseGenerator(time){
return new Promise((resolve, reject)=>{
setTimeout(()=>resolve("resolved after " + time),time)
});
}
time=100;
a = promiseGenerator(time);
a.then((value) => {
console.log('a resolved');
b = promiseGenerator(time);
c = promiseGenerator(time);
d = promiseGenerator(time);
return Promise.all([b, c, d])//this promise will be resolved after each of b,d,d are resolved, in any order
})
.then((value) => {
console.log('b,c,d resolved');
e = promiseGenerator(time);
return e
})
.then((value) => {
console.log('e resolved');
f = promiseGenerator(time);
return f
})
.then((value) => {
console.log('f resolved');
g = promiseGenerator(time*2);
return g
})
.then((value) => {
console.log('g resolved');
});

最新更新