在使用foreach的时候遇到点小麻烦,特此用几个小例子理顺一下概念,顺便记录一下。

let a = [1,2,3,4,5];

function delay(){
    return new Promise((resolve)=>{
        setTimeout(resolve,300);
    });
}
function test1(){
    a.forEach((item)=>{
        console.log("start -1");
        console.log(item);
        console.log("end -1");
    });
    console.log("all done - 1");
}

async function test2(){
    a.forEach(async(item)=>{
        console.log("start -2");
        await delay();
        console.log(item);
        console.log("end -2");
    });
    console.log("all done -2 ");
}


function test3(){
    for(let item of a){
        console.log("start -3");
        console.log(item);
        console.log("end -3");
    }
    console.log("all done -3");
}


async function test4(){
    for(let item of a){
        console.log("start -4");
        await delay();
        console.log(item);
        console.log("end -4");
    }
    console.log("all done -4");
}

test1的输出如下:

js中的for和foreach处理async await时的差异-LMLPHP

test2的输出如下:

js中的for和foreach处理async await时的差异-LMLPHP

test3的输出如下:

js中的for和foreach处理async await时的差异-LMLPHP

test4的输出如下:

js中的for和foreach处理async await时的差异-LMLPHP

foreach本身是同步的,但如果foreach中加了async和await,就变相让这个foreach变成了异步。

如果要在循环中处理async和await方法,直接使用for就好了

06-27 02:08