美文网首页
await 和 async 的用法

await 和 async 的用法

作者: Marshall3572 | 来源:发表于2021-04-07 20:59 被阅读0次

    复习Promise

    async是什么?

    1. async和Promise有关
    2. 可以让异步函数更像同步函数

    async function是声明这个函数是异步函数,function是声明这个函数是同步函数。
    所有async函数都会返回一个Promise
    由此可见,async和await都是promise的语法糖。

    await 和 async 的用法

    await只能放在async函数里

    await后边要接一个会return new promise的函数

    test函数在三秒钟之后才执行完毕,所以需要async来标记一下表示test是个特殊的函数,js引擎应该做一些特殊的处理

    为什么要await?让异步代码promise看起来更像同步代码(人性)。
    二者本质上是相同的,只是写法不同。promise的代码写起来更抽象,await代码复杂但是阅读理解不费脑筋。
    可是我如果想同时玩两个筛子呢?这时候就体现了await的局限性,他只能接受一个promise
    用promise实现同时玩两个筛子

    Promise.all([猜大小('大'), 猜大小('大')])
      .then((x)=>{console.log(x), (y)=>console.log(y)})
    

    补充:
    Promise.all两个都成功才算成功,Promise.race两个只要有一个成功就算成功

    function 猜大小(猜测) {
      return new Promise((resolve, reject) => {
        // 背下来
        console.log("开始摇色子");
        setTimeout(() => {
          let n = 6; //parseInt(Math.random() * 6 + 1, 10); // 1~6
          if (n > 3) {
            if (猜测 === "大") {
              resolve(n);
            } else {
              reject(n);
            }
          } else {
            if (猜测 === "小") {
              resolve(n);
            } else {
              reject(n);
            }
          }
        }, 1000);
      });
    }
    
    async function test() {
      try {
        let n /*[6,6]*/ = await Promise.all([猜大小("大"), 猜大小("大")]);
        console.log("好嗨哦" + n);
      } catch (error) {
        console.log("输光了" + error);
      }
    }
    
    var result = test();
    console.log(result);
    
    

    相关文章

      网友评论

          本文标题:await 和 async 的用法

          本文链接:https://www.haomeiwen.com/subject/aozukltx.html