JavaScript 异步编程:从 Promise 到异步迭代
1. 顺序执行 Promise
在 JavaScript 中, Promise.all() 可以轻松地并行运行任意数量的 Promise,而 Promise 链则能方便地表达固定数量的 Promise 序列。但要顺序运行任意数量的 Promise 则相对棘手。
例如,有一个 URL 数组需要获取内容,为避免网络过载,希望逐个获取。由于数组长度和内容未知,无法提前写出 Promise 链,需要动态构建,代码如下:
function fetchSequentially(urls) {
const bodies = [];
function fetchOne(url) {
return fetch(url)
.then(response => response.text())
.then(body => {
bodies.push(body);
});
}
let p = Promise.resolve(undefined);
for(url of urls) {
p = p.then(() => fetchOne(url));
}
return p.then(() => bodies);
}
使用示例:
超级会员免费看
订阅专栏 解锁全文
70

被折叠的 条评论
为什么被折叠?



