美文网首页
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