.then执行'待定'而非解决的承诺

时间:2017-02-21 19:12:51

标签: javascript arrays es6-promise

为什么以下代码会记录待处理的承诺数组?我希望解决数组中的所有promise,然后执行.then方法中的函数。

for (let i = 0; i < limit; i++) {
    promiseArray.push(fetch(someUrls[i]))
}

Promise.all(promiseArray)
    .then(responses => responses.map(response => response.text()))
    .then(result => console.log(result))

提前致谢

2 个答案:

答案 0 :(得分:6)

那是因为response.text() method returns a promisefetch是一个2承诺的事情。一个是实际请求,另一个是转换。

您可以做的是将array.map操作包装在另一个Promise.all中。

Promise.all(promiseArray)
    .then(responses => Promise.all(responses.map(response => response.text())))
    .then(result => console.log(result))

答案 1 :(得分:2)

您需要将链接放在Promise.all内,因为response.text()也会返回另一个承诺。

for (let i = 0; i < limit; i++) {
    promiseArray.push(fetch(someUrls[i]))
}

Promise.all(promiseArray)
    .then(responses => Promise.all(responses.map(response => response.text()))) //Needs to wait for all text() promise methods to resolve
    .then(result => console.log(result))

或者您可以在for循环中链接承诺:

for (let i = 0; i < limit; i++) {
    promiseArray.push(fetch(someUrls[i]).then(res => res.text()));
}

Promise.all(promiseArray).then(result => console.log(result))