为什么以下代码会记录待处理的承诺数组?我希望解决数组中的所有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))
提前致谢
答案 0 :(得分:6)
那是因为response.text()
method returns a promise。 fetch
是一个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))