以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 代码题
30. 实现async helper - `parallel()`

实现思路:

  1. 对于每个异步操作,新建一个Promise对象,并将resolve和reject方法作为参数传给异步操作函数
  2. 将这些Promise对象放入数组中,使用Promise.all等待它们全部完成
  3. 如果发生错误,直接reject
  4. 如果全部完成,将结果数组作为resolve值返回

代码实现如下:

function parallel(asyncFuncs) {
  return function(callback, data) {
    const promises = asyncFuncs.map(func => {
      return new Promise((resolve, reject) => {
        func((error, result) => {
          if (error) {
            reject(error);
          } else {
            resolve(result);
          }
        }, data);
      });
    });
    Promise.all(promises)
      .then(results => {
        callback(undefined, results);
      })
      .catch(error => {
        callback(error, undefined);
      });
  };
}

使用示例:

const async1 = (callback) => {
   setTimeout(() => {
     callback(undefined, 1);
   }, 1000);
}

const async2 = (callback) => {
   setTimeout(() => {
     callback(undefined, 2);
   }, 500);
}

const async3 = (callback) => {
   setTimeout(() => {
     callback(undefined, 3);
   }, 1500);
}

const all = parallel([async1, async2, async3]);

all((error, data) => {
   console.log(error); // undefined
   console.log(data); // [1, 2, 3]
}, 1);