外异内同
看看下面这段代码
async function task () {
for (let val of [0, 1, 2, 3]) {
let address = ['https://mp.youkuaiyun.com','https://mp.youkuaiyun.com/mdeditor','https://baidu.com','https://mp.youkuaiyun.com/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是同步, 简称“外异内同”