1.talk is cheep ,show my code .
我们首先看一段代码,了解一下各个async函数之间的关系
function sleep(res,delay){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(res)
},delay)
})
}
async function test(){
var testRes= await sleep(1,3000)
console.log('testRes:'+testRes)
var testRes2= await sleep(3,2000)
console.log('testRes2:'+testRes2)
}
async function test2(){
var test2Res= await sleep(2,4000)
console.log('test2Res:'+test2Res)
}
function test3(){
var test3Res=0
console.log('test3Res:'+test3Res)
}
test()
test2()
test3()
//最终控制台打印结果为 test3Res:0 testRes:1 test2Res:2 testRes2:3
//因为 对await处理的异步 只在当前所处的async函数中存在同步关系 也就是 testRes和testRes2存在同步关系 而如果是不同的函数 则之间依然是异步关系也就是 test()函数和test2和test3三个函数之间依然是异步关系
//这三个函数并不会因为某个函数内部使用了await 而等待该函数执行完 再依次执行 因为外部并不是同步环境关系
/*
而forEach map filter等遍历数组的方法 我们以forEach举例
我们之前认为 下面这种方式可以同步等待每一次的遍历的操作 也就是第一个遍历操作内部代码执行完才会遍历第二次 其实并不是
因为 forEach代码的实现原理 是将该async回调函数 进行while循环 也就是和上面我们所说的一致
async函数内部使用awite 只是该函数内部产生同步环境 而函数外部依然是异步 也就是asynccallback1() 和asaynccallback2() 两个并不是同步关系 如果asynccallback1()函数内部有异步操作 asynccallback2()函数并不会等待asynccallback1()函数执行完才执行
arr.forEach(async(item)=>{
awite 异步操作
})
*/