美文网首页
async 函数(笔记 )

async 函数(笔记 )

作者: 灰灰_82a6 | 来源:发表于2019-10-10 16:29 被阅读0次

基本用法

执行函数时,遇到await,会等到异步操作完成,再接着执行函数体内后面的语句。
如下代码会先打印1,再打印2。

function a() {
        return new Promise((resolve) => {
            setTimeout(function() {
                console.log(1);
                resolve();
            }, 2000)
        })
    }

    async function b() {
        await a(); //a要返回一个Promise对象,否则await对它不起作用
        console.log(2)
    }
    b()

返回Promise 对象

1.async函数返回一个 Promise对象。
2.async函数内部return语句返回的值 ,会成为then方法回调函数的参数。

async function asyncPrint() {
      return "hello world";
}

asyncPrint().then(greeting => console.log(greeting)); //hello world

3.async函数内部抛出错误,会导致返回的Promise对象变为reject状态。抛出的错误对象会被catch方法回调函数接收到。

async function asyncPrint() {
      throw new Error('出错了');
}

asyncPrint()
.then(greeting => console.log(greeting))
.catch(err => console.log(err)); // Error: 出错了
  1. async函数返回的Promise对象,必须等到内部所有await命令后面的 Promise 对象执行完,才会发生状态改变,除非遇到return语句或者抛出错误。也就是说,只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数。

await 命令

await后面应该返回一个Promise对象,如果不是,就直接返回这个值。

async function f() {
  // 等同于
  // return 123;
  return await 123;
}

f().then(v => console.log(v))
// 123

注意点

  1. 上面提到因为抛出错误会让状态变为reject , 所以最好把await命令放在try...catch代码块中, 如下
async function myFun() {
  try {
    await aa();
  } catch (err) {
    console.log(err);
  }
}

// 另一种写法

async function myFun() {
  await aa()
  .catch(function (err) {
    console.log(err);
  });
}
  1. getFoogetBar是两个独立的异步操作,被写成继发关系。这样比较耗时,因为只有getFoo完成以后,才会执行getBar,完全可以让它们同时触发。
let foo = await getFoo();
let bar = await getBar();

多个await命令后面的异步操作,如果不存在继发关系,最好让它们同时触发。

// getFoo和getBar都是同时触发,这样就会缩短程序的执行时间
// 写法一
let [foo, bar] = await Promise.all([getFoo(), getBar()]);

// 写法二
let fooPromise = getFoo();
let barPromise = getBar();
let foo = await fooPromise;
let bar = await barPromise;

相关文章

  • async和await的使用

    async函数 什么是async函数? async函数是使用async关键字声明的函数。 mdn文档:https:...

  • JS中的async/await -- 异步隧道尽头的亮光

    async函数 简单解释async函数就是Generator函数的语法糖。 Generator函数写法 async...

  • async 函数(笔记 )

    基本用法 执行函数时,遇到await,会等到异步操作完成,再接着执行函数体内后面的语句。如下代码会先打印1,再打印...

  • 2018-05-22

    async 函数 1. 含义 async 函数是 Generator 函数的语法糖。async函数将Generat...

  • ES8(13)、await 和 async 的用法

    async函数是使用async关键字声明的函数。 async函数是AsyncFunction构造函数的实例, 并且...

  • async函数

    async函数 async函数的含义 简单来说:async 函数就是 Generator 函数的语法糖下面是两个是...

  • ES8-async&await

    async函数是使用async关键字声明的函数,async函数是AsyncFunction构造函数的实例,返回值是...

  • async 函数(转载)

    async 函数 含义 ES2017 标准引入了 async 函数,使得异步操作变得更加方便。 async 函数是...

  • ES7 Async/Await快速入门

    用法: 使用async 声明函数,在async函数内使用await async function xxx(){aw...

  • ES6——异步操作

    async 函数 ES2017 标准引入了 async 函数,使得异步操作变得更加方便。async 函数是什么?一...

网友评论

      本文标题:async 函数(笔记 )

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