在在for循环中依次执行异步操作循环中依次执行异步操作
上一篇文章写了使用Promise进行异步操作:使用Promise来进行异步操作。
这适用于单条数据的处理场景,如果是在for循环中处理多条数据,依次处理每条数据的异步操作呢?
思路:还是利用Promise的then()来进行链式操作,每次循环的时候往Promise后添加一个新的then(),这样就可以保证上一个数
据的异步操作执行完毕再执行下一个数据的异步操作。
示例代码:
const promise = Promise.resolve();
for(let index in newArray){
promise = promise.then(()=>{
return asyncOperate(newArray[index])
})
}
promise.then(()=>{
console.log('所有的操作已经执行完毕')
})
function asyncOperate(data){
return Promise.resolve(data)
.then((res)=>{
//res是外面传进来的数据
return new Promise((resolve,reject)=>{
setTimeout(()=>{
//第一步操作
...
const data1 = ...
resolve(data1)
},1000)
})
})
.then(()=>{
//下一步操作
...
})
}
补充:
除了这种利用promise的then链的写法,还有利用async/await的写法。
示例代码:
async function run(){
for(let p of newArray){
await asyncOperate(p)
}
}
run().then(()=>{
console.log('所有的操作已经执行完毕')
})
function asyncOperate(data){
return Promise.resolve(data)
.then((res)=>{
//res是外面传进来的数据
return new Promise((resolve,reject)=>{
setTimeout(()=>{
//第一步操作
...
const data1 = ...
resolve(data1)
},1000)
})
})
.then(()=>{
//下一步操作
...
})
}
作者:明月松江