async与await

async / await 是ES7提出的基于Promise的解决异步的最终方案。

一、async

async是一个加在函数前的修饰符,被async定义的函数会默认返回一个Promise对象resolve的值。因此对async函数可以直接then,返回值就是then方法传入的函数。

      async function sum() {
        console.log(1);
        return 2;
      }
      sum().then((res) => {
        console.log(res);
      });  //换行输出:1  2
      async function sum1() {
        console.log("promise");
        return new Promise(function (resolve, reject) {
          resolve("111");
        });
      }
      sum1().then((res) => {
        console.log(res);
      });  //换行输出:promise  111

二、await 

await 也是一个修饰符,只能放在async定义的函数内。

await 修饰的如果是Promise对象:可以获取Promise中返回的内容(resolvereject的参数),且取到值后语句才会往下执行;

如果不是Promise对象:把这个非promise的东西当做await表达式的结果。

     async function fun() {
        let a = await 111;
        let b = await new Promise((resolve, reject) => {
          setTimeout(function () {
            resolve("222");
          }, 3000);
        });
        let c = await (function () {
          return "333";
        })();
        console.log(a, b, c);
      }
      fun(); // 输出结果: 1 (3秒后输出) "222" "333"
  • 如果 Promise 有一个正常的返回值,await 语句也会返回它:  
      async function fun1() {
        let value = await new Promise(function (resolve, reject) {
          resolve("Return value");
        });
        console.log(value);
      }
      fun1(); //输出:Return value

三、async 基本错误处理 

async function add() {
     // console.log(x);//未定义变量
     throw new Error("fail");//手动抛出错误
}
add().catch((error) => {
        console.log(error);
      });

四、await 错误处理

处理异常的机制将用 try-catch 块实现。

     async function sum() {
        try {
          await new Promise(function (resolve, reject) {
            // throw new Error("error");
            throw "some error"; // 或者 reject("error")
            console.log("111"); //错误未处理不执行
          });
        } catch (err) {
          console.log(err);
        }
        console.log("错误已处理"); //错误已处理,执行
      }
      sum();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值