var loopAsync = function(taskArr, itemFn) {
let len = taskArr.length;
return new Promise((resolve, reject) => {
let nextTask = function(index) {
if (index >= len) {
return resolve('全部遍历结束') // 执行结束
}else {
itemFn(taskArr[index], {
success(){
// 执行成功调用
console.log('执行成功')
},
error() {
// 执行失败调用
console.log('执行失败')
},
over() {
// 执行结束调用-不管成功与否
nextTask(index + 1)
}
})
}
}
nextTask(0) // 开始执行
})
}
// 使用案例
loopAsync([1, 2, 3], function(item, fn) {
setTimeout(function() {
if (item%2== 1) {
fn.success() // 触发成功
}else {
fn.error() // 触发失败回调
}
fn.over() // 整个异步处理完成
}, item * 1000)
}).then(res => {
console.log(res)
})
js 异步循环使用递归
最新推荐文章于 2023-02-24 14:49:03 发布