1. const fn = async () =>{
    2. const res1 = await fn1();
    3. const res2 = await fn2();
    4. console.log(res1);// 1
    5. console.log(res2);// 2
    6. }
    7. //并发请求
    8. const fn = () =>{
    9. Promise.all([fn1(),fn2()]).then(res =>{
    10. console.log(res);// [1,2]
    11. })
    12. }
    13. // Promise.race 其中一个成功就返回

    async….awiat相对应
    async函数返回一个 Promise 对象,可以使用then方法添加回调函数。
    当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。

    1. async function getStockPriceByName(name) {
    2. const symbol = await getStockSymbol(name);
    3. const stockPrice = await getStockPrice(symbol);
    4. return stockPrice;
    5. }
    6. getStockPriceByName('goog').then(function (result) {
    7. console.log(result);
    8. });
    • async函数内部return语句返回的值,会成为then方法回调函数的参数
    • async函数内部抛出错误,会导致返回的 Promise 对象变为reject状态。抛出的错误对象会被catch方法回调函数接收到。
    • async函数返回的 Promise 对象,必须等到内部所有await命令后面的 Promise 对象执行完,才会发生状态改变,除非遇到return语句或者抛出错误。只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数。 (简单而言 全部执行完,或者报错了,才会执行then)
      1. async function getTitle(url) {
      2. let response = await fetch(url);
      3. let html = await response.text();
      4. return html.match(/<title>([\s\S]+)<\/title>/i)[1];
      5. }
      6. getTitle('https://tc39.github.io/ecma262/').then(console.log)
      7. // "ECMAScript 2017 Language Specification"
      await命令后面是一个 Promise 对象,返回该对象的结果。如果不是 Promise 对象,就直接返回对应的值
      ```javascript //休眠,定义sleep ,在异步执行时,使用await进行等待时候的休眠 function sleep(interval) { return new Promise(resolve => { setTimeout(resolve, interval); }) }

    // 用法 async function one2FiveInAsync() { for(let i = 1; i <= 5; i++) { console.log(i); await sleep(1000); } }

    one2FiveInAsync();

    1. await命令后面的Promise对象,运行结果可能是rejected,所以最好把await命令放在**try...catch**代码块中 <br />同时await 后面异步操作函数,在不存在继发关系的情况下,最好**同时触发**
    2. ```javascript
    3. //try catch
    4. async function myFunction() {
    5. try {
    6. await somethingThatReturnsAPromise();
    7. } catch (err) {
    8. console.log(err);
    9. }
    10. }
    11. // 另一种写法
    12. async function myFunction() {
    13. await somethingThatReturnsAPromise()
    14. .catch(function (err) {
    15. console.log(err);
    16. });
    17. }
    18. ------------------------------------------------------------
    19. 在两个异步操作不存在异步操作时,这么写变成继发关系,会比较耗时
    20. let foo = await getFoo();
    21. let bar = await getBar();
    22. 同时触发
    23. // 写法一
    24. let [foo, bar] = await Promise.all([getFoo(), getBar()]);
    25. // 写法二
    26. let fooPromise = getFoo();
    27. let barPromise = getBar();
    28. let foo = await fooPromise;
    29. let bar = await barPromise;