您可以在每個承諾中添加一個.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