//首先有一个异步的函数:
function sleep(arguments='') {
return new Promise((resolve, reject) => {
//模拟请求
setTimeout(() => {
resolve(arguments)
}, 1000)
})
}
在有调 函数 的循环 里使用async awaite
列如:forEach,map , 合适并行 promise.all
**//并行**
promiseAll()
async function promiseAll() {
let arr=[1,2,3];
let promiseArr = [];
console.log('Start')
arr.forEach(item => {
promiseArr.push((async (item) => {
await sleep(1)
console.log(item)
})(item))
})
await Promise.all(promiseArr)
console.log('End')
}
// Start
...耗时
// 1
// 2
// 3
// End
**并发操作**
promiseAll()
async function promiseAll() {
const arr = [1,2,3];
let promiseArr = [];
console.log('Start')
promiseArr.push( arr.map(async (item) => {
//耗时操作
const contents = await sleep(item)
console.log(contents)
}))
await Promise.all(promiseArr);
console.log('End')
}
// Start
...耗时
// 1
// 2
// 3
// End
在无回掉函数循环中使用 async await
列如:for ,for in ,for of ;串行发送
const arr= [1, 2, 3];
const forLoop = async _ => {
console.log('start');
for (let index = 0; index < arr.length; index ++) {
const fruit = arr[index];
const numFruit = await sleep(fruit);
console.log(numFruit);
}
console.log('End')
}
// start
...耗时
// 1
// 2
// 3
// End
const arr= [1, 2, 3];
const forInLoop = async _ => {
console.log('start');
for (let index in arr) {
const fruit = arr[index];
const numFruit = await sleep(fruit);
console.log(numFruit);
}
console.log('End')
}
// start
...耗时
// 1
// 2
// 3
// End
const arr= [1, 2, 3];
const forInLoop = async _ => {
console.log('start');
for (let item of arr) {
const numFruit = await sleep(item);
console.log(numFruit);
}
console.log('End')
}
// start
...耗时
// 1
// 2
// 3
// End
总结:在循环里的异步问题 总体来讲 可以用Promis.all 来解决