promise.all promise.race实现

301 阅读1分钟
const realizePromiseAll = (promises: any[]) => {
    return new Promise((res, rej) => {
      if (!promises || !Array.isArray(promises)) {
        return rej(new TypeError('arguments must be an array'));
      }
      
      let last: number = promises.length;
      const result: any = [];

      for (const item of promises) {
        Promise.resolve(item).then((data) => {
          result.push(data);
          last--;
          if (!last) {
            return res(result);
          }
        }).catch((err) => {
          return rej(err);
        });
      }
    });
  }
const realizePromiseRace = (promises: any[]) => {

    return new Promise((res, rej) => {
      if (!promises || !Array.isArray(promises)) {
        return rej(new TypeError('arguments must be an array'));
      }

      for (const item of promises) {
        Promise.resolve(item).then((data) => {
          return res(data);
        }).catch((err) => {
          return rej(err);
        });
      }
    });
  }