Skip to content

Latest commit

 

History

History
59 lines (48 loc) · 1.79 KB

PromiseAll.md

File metadata and controls

59 lines (48 loc) · 1.79 KB
标题 标签
PromiseAll(期约合并) function,promise(函数,期约)

实现一个期约合并函数。

  • 函数应该返回一个 Promise。
  • 使用 Array.isArray 检测传入的参数是否是一个数组。
  • 创建一个 count 变量用于计数,以及创建一个 resolveArr 变量用来存储结果值。
  • 遍历参数数组,并使用 Promise.resolve 包裹每一个参数,每次执行完成即计数,然后将值赋给结果数组,判断如果计数等于参数数组的长度,则直接 resolve 出去。
const myPromiseAll = promiseArr => {
  return new Promise((resolve, reject) => {
    if (!Array.isArray(promiseArr)) {
      return reject('arguments must be an array!');
    }
    let count = 0;
    let resolveArr = [];
    const len = promiseArr.length;
    for (let i = 0; i < len; i++) {
      Promise.resolve(promiseArr[i])
        .then(value => {
          count++;
          resolveArr[i] = value;
          if (count === len) {
            resolve(resolveArr);
          }
        })
        .catch(e => reject(e));
    }
  });
};

ts代码如下:

调用方式:

const promise1 = new Promise(resolve => resolve(1));
const promise2 = new Promise(resolve => resolve(2));
const promise3 = new Promise(resolve => resolve(3));
const promiseAll = myPromiseAll([promise1, promise2, promise3]);
promiseAll.then(function (res) {
  console.log(res);
});
// 输出:[1,2,3]

应用场景

结果如下:

<iframe src="codes/javascript/html/promiseAll.html"></iframe>