npm 包 @babel/plugin-proposal-async-generator-functions 使用教程

前言

在 ECMAScript 2018 中,提出了 Async Generator functions 这一新特性,允许我们使用 asyncawait 来控制生成器函数的异步行为,这在某些场景下是非常有用的特性。不过,由于该特性不是所有浏览器都支持,需要使用 Babel 进行转换。本篇文章将介绍如何使用 Babel 的插件 @babel/plugin-proposal-async-generator-functions 来实现该特性的转换。

安装

首先需要确保已经安装了 Babel,可以使用下面的命令进行安装:

--- ------- ---------- ----------- ----------

然后,安装 @babel/plugin-proposal-async-generator-functions

--- ------- ---------- ------------------------------------------------

配置

接着,在项目的 .babelrcbabel.config.js 文件中,加入 @babel/plugin-proposal-async-generator-functions 插件:

-- --------
-
  ---------- ----------------------------------------------------
-

-- ---------------
-------------- - -
  -------- ----------------------------------------------------
--

示例

现在,我们来看一些示例代码来演示 @babel/plugin-proposal-async-generator-functions 的转换功能。

示例 1:使用 Async Generator functions

----- --------- ---------------- -
  ----- ----- -------------------
  ----- ----- -------------------
-

----- -------- ------ -
  --- ----- ------ ----- -- ----------------- -
    -------------------
  -
-

-------

这段代码定义了一个使用了 Async Generator functions 的生成器函数 asyncGenerator,它使用 Promise.resolve 延迟了两次值的生成,然后通过 for await...of 循环输出了所有生成的值。

经过 Babel 编译转换后,它会变成:

--- --------------- - -------- -- -
  -------- ---------------- -
    ------ --------------------------------- ------------------------- -
      ----- --- -
        ------ --------------- - --------------- -
          ---- --
            ------------- - --
            ------ ---------------------------------------------

          ---- --
            ------------- - --
            ------ ---------------------------------------------

          ---- --
          ---- ------
            ------ ----------------
        -
      -
    ---
  -

  ------ ---------------
----

----- -------- ------ -
  --- ---------------- - ------------------

  --- -
    --- ---- -
      --- ---- - ----- ------------------------

      --- ----- - -----------

      -------------------
    -
  - ----- ----- -
    -----------------
  -
-

-------

可以看到,生成器函数被转换为了一个 IIFE(立即调用函数表达式),用 regeneratorRuntime.asyncregeneratorRuntime.awrap 来控制异步操作,for await...of 循环被转换为了使用 try...catch 来处理异步操作异常的代码。

示例 2:使用普通生成器函数

再看一下使用普通生成器函数的例子:

--------- ----------- -
  ----- --
  ----- --
-

----- -------- ------ -
  --- ----- ------ ----- -- ------------ -
    -------------------
  -
-

-------

这个例子使用普通生成器函数,通过 for await...of 循环输出了值。但是经过 Babel 编译后,输出的结果并不是我们所期望的:

--- ------- - ------------------------------------------------

-------- ----------- -
  ------ -------------------------------- -------------------- -
    ----- --- -
      ------ --------------- - --------------- -
        ---- --
          ------------- - --
          ------ --

        ---- --
          ------------- - --
          ------ --

        ---- --
        ---- ------
          ------ ----------------
      -
    -
  -- ---------
-

----- -------- ------ -
  --- ----- ------ ----- -- ------------ -
    -------------------
  -
-

-------

这是因为普通生成器函数不能通过 await 来控制异步操作,所以在经过 Babel 编译后,for await...of 循环被视为普通的 for...of 循环。

总结

通过本文的介绍,我们可以了解到如何使用 Babel 插件 @babel/plugin-proposal-async-generator-functions 来实现 ECMAScript 2018 中 Async Generator functions 新特性的转换。这对于开发中使用这一新特性的时候非常有用,不仅提高了兼容性,也方便了代码的维护和分享。如果觉得本文对您有所帮助,请点个赞支持一下吧!

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/92374


猜你喜欢

  • npm 包 @babel/helper-plugin-utils 使用教程

    在编写 JavaScript 应用程序时,我们通常需要使用 Babel 来将 ES6 或更新版本的 JavaScript 代码转换为可在当前浏览器环境中运行的 JavaScript。

    5 年前
  • npm 包 @babel/helper-module-imports 使用教程

    在前端开发过程中,我们经常需要使用一些第三方库来帮助我们实现某些功能。而这些第三方库往往需要通过 import 或者 require 语句来引入到我们的项目中。在这个过程中,我们可能会遇到一些问题,如...

    5 年前
  • npm 包 nor-api-helpers 使用教程

    介绍 nor-api-helpers 是一个用于快速构建基于 NorJS API 的 Web 应用程序的 Node.js 模块。它提供了各种脚手架工具、组件和样式,可以大大提高开发效率,并提供了丰富的...

    5 年前
  • npm 包 nor-newrelic 使用教程

    前言 在前端开发的过程中,性能监控是一个非常重要的环节。而 NewRelic 正是一个业内比较出名的性能监控服务提供商。在前端开发中,我们通过 npm 包 nor-newrelic 来集成 NewRe...

    5 年前
  • npm 包 nor-ref 使用教程

    前言 在前端开发中,我们经常需要对对象进行深度复制或深度合并。如果直接使用 JavaScript 自带的赋值操作符,只会赋值对象的引用,而不是对象本身,这样在后续的操作中就容易导致对象间的互相干扰。

    5 年前
  • Nor-nopg 使用教程

    在前端开发中,我们常常会使用 npm 包来帮助我们完成一些常见的任务。其中,nor-nopg 是一个非常实用的包,它可以帮助我们在 Node.js 应用程序中使用 PostgreSQL 数据库。

    5 年前
  • npm 包 nor-stack 使用教程

    npm 是一个非常实用的包管理工具,当你需要使用一些外部的 JavaScript 库时,只需要使用 npm 命令来下载相应的包,就能让自己的前端开发变得更加高效。其中一个非常实用的 npm 包是 no...

    5 年前
  • npm 包 nor-routes-json 使用教程

    nor-routes-json 是一个简单易用的 npm 包,它可以帮助开发者更加方便地管理网站路由配置。本文将介绍如何使用 nor-routes-json 包,并提供一些示例代码和使用技巧。

    5 年前
  • npm 包 nor-express 使用教程

    简介 在前端开发中,使用 Node.js 的 express 框架可以快速地搭建 web 服务器。而 nor-express 是一个基于 express 的 npm 包,它提供了很多的工具类和附加功能...

    5 年前
  • npm 包 @norjs/ref 使用教程

    随着前端技术的不断发展,npm 包成为了前端工程师提高效率不可或缺的一部分。今天,我们将会介绍 npm 包 @norjs/ref 的使用教程,这个包能够帮助我们实现对象引用的记录与操作。

    5 年前
  • npm 包 @norjs/pg 使用教程

    前言 在 Node.js 和 Web 开发中,与数据库的交互是非常重要的一环。而关系型数据库是其中使用最频繁的一类。而 PostgreSQL 是一个在开源社会中被广泛使用的关系型数据库,它具有高度的可...

    5 年前
  • npm 包 @norjs/extend 使用教程

    引言 在前端开发过程中,我们经常需要对一些对象进行操作和处理。若每次都手写相似的代码,将导致代码臃肿且难以维护。这时可能就需要一个工具来简化操作,提高开发效率。 @norjs/extend 就是这样一...

    5 年前
  • npm 包 nor-generic-parser 使用教程

    在前端开发中,我们经常需要对数据进行解析和处理,这时候 npm 包的使用就显得尤为重要。nor-generic-parser 是一个 npm 包,它可以很方便地对不同类型的数据进行解析和转换,本文将详...

    5 年前
  • npm 包 cloud-backend 使用教程

    前言 在前端开发中,我们常常需要访问后端 API 或者操作数据库等操作。这时,npm 包 cloud-backend 便能够为我们提供很大的帮助。cloud-backend 可以帮助我们快速搭建基于云...

    5 年前
  • npm 包 @norjs/backend 使用教程

    在前端开发中,我们经常需要进行后端开发,并且后端开发需要使用各种语言和框架。@norjs/backend 这个 npm 包可以帮助我们方便地进行后端开发。本文将介绍如何使用这个包来进行后端开发,并包含...

    5 年前
  • NPM包getargs使用教程

    在前端开发中,我们经常需要在命令行中使用一些参数来控制程序行为,这时候就可以使用一个 NPM 包叫做 getargs 来解析命令行参数。本文将介绍 getargs 的使用方法,包括安装、基本使用、高级...

    5 年前
  • npm 包 dblite 使用教程

    介绍 dblite 是一个轻量级的 npm 包,用于在 Node.js 中操作 SQLite 数据库。这是一个非常有用的工具,因为 SQLite 是一种非常流行的关系型数据库,广泛用于 Web 开发中...

    5 年前
  • npm 包 node-firebird-dev 使用教程

    前言 在前端开发中,需要与后端进行交互,而 node-firebird-dev 是一个 npm 包,可以在 Node.js 中与 Firebird 数据库进行交互,让前端开发更加灵活且高效。

    5 年前
  • npm 包 winston-loggly 使用教程

    在前端开发中,日志记录是一个不可或缺的重要环节。winston-loggly 是一个 npm 包,它可以与 winston 日志库一起使用,向 Loggly 提交记录日志。

    5 年前
  • 在前端开发中使用 npm 包 haibu-carapace

    在现代前端开发中,我们经常会依赖各种 npm 包来简化我们的工作流程。其中一个非常有用的 npm 包是 haibu-carapace,它为我们提供了一种简单的方式来运行本地或远程 Node.js 应用...

    5 年前

相关推荐

    暂无文章