您可以在每个承诺中添加一个.then()来计算完成的whos。 类似:
var count = 0;
var p1 = new Promise((resolve, reject) => {
setTimeout(resolve, 5000, 'boo');
});
var p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 7000, 'yoo');
});
var p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 3000, 'foo');
});
var promiseArray = [
p1.then(function(val) {
progress(++count);
return val
}),
p2.then(function(val) {
progress(++count);
return val
}),
p3.then(function(val) {
progress(++count);
return val
})
]
function progress(count) {
console.log(count/promiseArray.length);
}
Promise.all(promiseArray).then(values => {
console.log(values);
});
你总是可以有'promises'数组的长度和从每个承诺回调增量使用像'incrementCount()'这样的函数创建一个共享变量值,并且在同一个对象上创建一个像getPercent()这样的函数,当每个解析或拒绝发生时返回'counter * 100/promises.length'诺言。 – ishaan
您可以在将Promise.all()推送到数组之前,通过为每个promise添加'.then()'来模拟promise.progress()。这有点额外的开销,但可以得心应手。 – Shilly