写在前面:要求是等上一个请求完毕之后,再发起下一个请求。一般用不到,写的时候,发现forEach不行,得用for。
注:我这里用setTimeOut
与promise
去模拟请求。
步骤1:先写一个模拟请求的方法
function simulation(i) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(i);
resolve();
}, 1500);
});
}
步骤2:然后循环调用即可
async function test() {
const arr = [1, 2, 3];
// arr.forEach(async(item) => await simulation(item))
for (let i = 0; i < arr.length; i++) {
await simulation(arr[i]);
}
console.log("结束");
}
22/11/14补充:如果循环过程中,碰到出错的情况,需要继续执行,使用try…catch:
async function test () {
const arr = [1, 2, 3]
// arr.forEach(async(item) => await simulation(item))
for (let i = 0; i < arr.length; i++) {
try {
await simulation(arr[i])
} catch (err) {
// TODO
}
}
console.log('结束')
}
23/2/6补充:循环的时候,还可以用ES6的for…of或者ES5的for…in进行代替。
- for…of
async function test() {
const arr = [1, 2, 3];
// arr.forEach(async(item) => await simulation(item))
for (let item of arr) {
await simulation(item)
}
console.log("结束");
}
- for…in
async function test() {
const arr = [1, 2, 3];
// arr.forEach(async(item) => await simulation(item))
for (let i in arr) {
await simulation(arr[i])
}
console.log("结束");
}