以下为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);