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
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
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
上次更新: 2022/7/25 下午9:04:19