Promise执行顺序

记录项目开发中遇到的一些Promise执行顺序问题。

promise按顺序执行

上一个请求完成后才发起下一个请求。

方法一:Array.prototype.reduce()组成Promise chain

MDN Array.prototype.reduce() promise顺序执行

demo:按顺序下载图片(未处理错误情况)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function runPromiseInSequence(arr) {
return arr.reduce(
(promiseChain, currentFunction) => promiseChain.then(currentFunction),
Promise.resolve()
);
}

function loadImage(url, index) {
return () => {
return new Promise((resolve, reject) => {
const img = new Image();

img.onload = resolve

img.onerror = reject

img.src = url;
});
};
}


const promises = urls.map((url, index) => loadImage(url, index));

runPromiseInSequence(promises);

限制Promise的并发数

限制一次最多发送m个请求

方法一:Promise.all

demo:有n个图片资源,要求同时下载的图片数量不超过m个(未处理错误情况)