promise串行写法
# promise串行写法
给定一个数组urls,里面保存着一组请求的url。通过调用一个getResponse(url)方法 发送异步请求。该方法返回值为一个promise。
const timeout = (ms) =>
new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, ms);
});
const ajax1 = () =>
timeout(3000).then(() => {
console.log("1");
return 1;
});
const ajax2 = () =>
timeout(1000).then(() => {
console.log("2");
return 2;
});
const ajax3 = () =>
timeout(2000).then(() => {
console.log("3");
return 3;
});
const mergePromise = (ajaxArray) => {
// 在这里实现你的代码
};
mergePromise([ajax1, ajax2, ajax3]).then((data) => {}); // data 为 [1, 2, 3]});
// 要求分别输出// 1// 2// 3// done// [1, 2, 3]
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
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function mergePromise(arr) {
const res = []
return new Promise((resolve, reject) => {
arr.reduce(
(pre, cur) => pre.then(cur).then((data) => res.push(data)),
Promise.resolve()
)
.then(() => resolve(res))
})
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
const arr = [
() => new Promise((resolve) => setTimeout(() => resolve(1), 3000)),
() => new Promise((resolve) => setTimeout(() => resolve(2), 2000)),
() => new Promise((resolve) => setTimeout(() => resolve(3), 1000)),
];
function mergePromise(ajaxArray) {
let result = [];
return new Promise((resolve) => {
ajaxArray.reduce(
(pre, cur) =>
// 串行的实现
pre.then(cur).then((data) => {
result.push(data);
}),
// reduce的初始值
Promise.resolve()
)
// 最后一次执行的reduce会返回。箭头函数 返回一个promise
.then(() => {
resolve(result)
})
})
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24