JS--async/await的基础知识

51 阅读2分钟
  • async/await:是promise+Generator的“语法糖”
    • async是对函数的修饰-> async function xx(){...}
      • 让函数的返回值自动变为promise实例
        • 函数执行报错,则返回状态是rejected,值是报错原因的实例
        • 如果执行不报错,再看看返回值
          • 返回值是新的实例,则以自己返回的promise实例为主
          • 其它情况返回一个状态是fulfilled,值是返回值的实例
      • 可以在函数中使用await
    • await可以监听promise实例的状态,从而决定去做啥事 -> let xxx await [promise实例]
      • 必须是出现在一个函数中,并且是经过async修饰的函数
      • await后面需要跟一个promise实例「如果不是promise实例,浏览器也会把其变为promise实例」
        • await 14;=>await Promise.resole(14);
      • await会“等待”后面实例的状态为“成功”时,再把当前上下文中 ,await下面的代码执行!xxx就是实例状态
      • 为成功返回的结果!
      • 如果await后面的实例状态是失败,则下面代码不会执行(控制台爆红,但是不影响其它代码执行)
      • 我们是基于try/catch实现await后面实例为失败态的处理,避免爆红
const fn = async ()=> {
    return Promise.resolve(100);
}
console.log(fn());//返回promise实例:fulfilled undefined

const query = () => {
    return new Promise((resolve, reject)=> {
        setTimeout(()=> {
            resolve(100)
        },2000)
    })
}

(async function (params) {
    try {
        let reault = await query();//在不知道请求结果之前,当前上下文await下面的代码不会执行,只有后面实例状态为陈工,下面代码彩之星,如果实力状态是失败,下面代码也不执行「因为我们没有做失败情况的处理,所以控制台会飘红」
        console.log('请求成功',reault);
    } catch (reason) {
        //实例状态是失败
        console.log('请求失败:',reason)
    }
})()

image.png