外异内同
看看下面这段代码
async function task () {
for (let val of [0, 1, 2, 3]) {
let address = ['https://mp.csdn.net','https://mp.csdn.net/mdeditor','https://baidu.com','https://mp.csdn.net/mdeditor']
let result = await fetch(`${address[val]}`);
console.log('in')
}
}
task();
console.log('out')
这段代码先打印了 out
, 然后打印两次 in
, 第三次因为跨域, task函数返回错误 , 不会继续请求第四次
从上面的例子看到:
async
声明了一个 异步函数,这个 异步函数 体内有一行 await 语句,它告示了该行为同步执行,并且与上下相邻的代码是依次逐行执行的。就是说:
- async 函数执行,返回了一个 promise 对象, 不会阻塞后面的代码, 所以可以理解 task 是一个异步方法
- await 所在的那一行语句是同步的
既然返回promise, 上面task就可以这样
task().then(res => {alert(res)}).catch(err=>alert(err))
task 整体是一个异步函数,内部的await是同步, 简称“外异内同”