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

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

使用Promise来完成该题目:

const sequence = (funcs) => {
  return (callback, data) => {
    funcs.reduce((prevPromise, func) => {
      return prevPromise.then((data) => {
        return new Promise((resolve, reject) => {
          func((error, result) => {
            if (error) {
              reject(error);
            } else {
              resolve(result);
            }
          }, data);
        });
      });
    }, Promise.resolve(data))
      .then((finalResult) => {
        callback(null, finalResult);
      })
      .catch((error) => {
        callback(error, null);
      });
  };
};

不使用Promise来完成该题目:

const sequence = (funcs) => {
  return (callback, data) => {
    let currentIndex = 0;
    const next = (error, result) => {
      if (error) {
        callback(error, null);
        return;
      }
      currentIndex++;
      if (currentIndex === funcs.length) {
        callback(null, result);
      } else {
        funcs[currentIndex](next, result);
      }
    };
    funcs[0](next, data);
  };
};

这两种实现方式都能够正确地串联异步函数。第一种使用了Promise和async/await来避免了回调地狱和不必要的状态判断;第二种使用了普通的回调函数来实现,更加清晰简洁。但由于题目中限制了接口类型,第二种实现方式更符合题目要求。