await与async的作用及用法

async和await被称作是异步的终极解决方案

await有两个作用,一是作为求值关键字,二是将异步操作变成同步操作;如果方法中使用了await,那么在方法前面必须加上async

  • 作为求值关键字,await后面可以跟Promise或表达式,可以直接获取Promise中的值或表达式的值

    • 后面跟Promise

      app.use(async (ctx, next) => {
        // next()返回的是Promise,a的值是"hello, world!"
        const a = await next();
        
        const b = next();
        b.then((res) => {
          console.log(res); // 打印出"hello, world!"
        })
      });
      
      app.use((ctx, next) => {
        return "hello, world!";
      })
      
    • 后面跟表达式

      const a = await 100*100;
      
  • 将异步操作变成同步操作

    await可以阻塞当前线程,将异步操作变成同步,被阻塞的线程并没有被空闲,而是去执行其他的操作

  • 释放异常(抛出异常)

    await可以进行求值操作,当await后面跟的是Promise时,如果Promise中的操作是resolve(成功),那么await获取的就是操作成功时的返回值;如果Promise中的操作是reject(失败),await获取的就是操作失败时的返回值,并且如果在await上加了try catch,是可以捕捉到异常的

    async function fun1() {
        try {
            // 必须加await,不然会报错:UnhandledPromiseRejectionWarning
            await fun2();
        } catch (error) {
            console.log("error")
        }
    }
    
    function fun2() {
        return new Promise((resolve, reject) => {
            reject("error");
        })
    }
    
    fun1();
    

async的作用是将方法的返回值封装成Promise

async function t() {
  return "hello";
}

console.log(t()); // 打印出 Promise{"hello"}
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值