以下为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来避免了回调地狱和不必要的状态判断;第二种使用了普通的回调函数来实现,更加清晰简洁。但由于题目中限制了接口类型,第二种实现方式更符合题目要求。