以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!
BFE.devAI解答 - JavaScript 代码题
30. 实现async helper - `parallel()`
实现思路:
- 对于每个异步操作,新建一个Promise对象,并将resolve和reject方法作为参数传给异步操作函数
- 将这些Promise对象放入数组中,使用Promise.all等待它们全部完成
- 如果发生错误,直接reject
- 如果全部完成,将结果数组作为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);