JavaScript实现多个异步请求有序且同步完成
前言
有时候我们需要执行多个异步请求任务,并且需要都执行成功再执行下一步操作,对返回值的结果也是有要求的,那么则可以使用以下方式,构建一个异步任务队列,然后批量处理,最后拿到统一的结果。
代码如下:
// 任务队列
let taskList = [];
for (var i = 1; i <= 10; i++) {
let task = new Promise((resolve, reject) => {
taskMethod(i, resolve, reject)
});
taskList.push(task);
}
Promise.all(taskList).then(success => {
// 多个异步任务执行成功,在此处执行下一步操作
console.log('finalResult:', success)
}).catch(error => {
// 多个异步任务执行失败,在此处执行下一步操作
console.log("error:", error)
});
/**
* 需要执行任务的方法,参数可自定义调整
* @param {Object} index 第 n 个任务
* @param {Object} resolve 成功回调
* @param {Object} reject 失败回调
*/
function taskMethod(index, resolve, reject) {
// 模拟异步任务耗时
setTimeout(() => {
console.log("第 " + index + " 个任务开始执行")
if (1 == 1) {
resolve("success" + index)
} else {
reject("error" + index)
}
}, i * 1000)
}