async与await
async
是“异步”的简写,而 await
可以认为是 async wait 的简写。await 只能出现在 async 函数中。async 用于申明一个 function 是异步的,而 await 操作符用于等待异步执行完毕。
async起什么作用
用于声明函数是一个异步函数。 声明的方式
//异步函数的声明方式
async function f1(){}
let fn2=async function(){}
let fn3=async()=>{}
async用于返回/输出的是一个 Promise 对象。 如果没有return 则默认返回 Promise.resolve()
Promise.resolve方法允许调用时不带参数,直接返回一个resolved状态的 Promise 对象。


await起什么作用
await 是在等待一个 async函数(异步函数)执行完成之后的一个返回值,后面跟直接量或者普通函数都是可以的(不过这时候的await就是个摆设 没什么用的),如果等到的返回值是Promise.resolve(变量),await还会直接 resolve函数传出来的值。await等待的时候就不会执行后面的语句。

await语句后的Promise对象变成reject状态时,那么整个async函数会中断,后面的程序不会继续执行
//await 只能等待成功的状态 失败需要抛出异常
async function f3() {
try {
var z = await Promise.reject(30);
} catch (e) {
console.log(e); // 30
}
}
结合 asiox 使用
asiox 返回的就是一个promise实例,可以直接使用 await

结合 Promise.all方法,Promise.race方法
Promise.all全部resolve才算resolve,Promise.race 谁的状态先改变,先返回谁 无论是resolve还是reject(如果时间一样,数组中排前面的先触发);all和race的参数都是一个数组,两个方法返回的都是promise对象,是个异步;

async、await与setTimeout结合使用 sleep
await并不能等到setTimeout,如果没有return 那么默认返回 undefined

休眠n秒以后执行其后面的语句
//sleep
function sleep (s) {
return new Promise((resolve) => setTimeout(resolve, s*1000));
},
async function doit(){
await sleep(2);
// 等两秒后执行别的
}
doit();