ES9的新特性:Generators with return and throw

阅读时长 4 分钟读完

ES9是ECMAScript的第9个版本,其中包含了许多重要的新特性。其中,Generators with return and throw是一项非常值得关注的新增特性。

Generators是什么?

在ES6中,我们引入了Generators这个新概念。Generators可以将函数执行的控制权交给调用者。它们可以在调用之间保存状态,并能够在执行过程中暂停和恢复。在使用JavaScript进行异步编程时,Generators是非常有用的工具。它们可以让我们编写干净、易于理解的异步代码。

举个例子,以下是一个基本的Generator函数:

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

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

在上面的代码中,我们创建了一个Generator函数generateSequence()。该函数使用yield关键字在调用之间暂停执行。我们还在函数末尾使用了return关键字,以在最后一个调用时将值返回。

我们使用generateSequence()函数创建了一个Generator对象generator。我们使用next()方法向前推进它的执行。每次我们调用next()方法时,调用的代码将执行到下一个yield语句或者直到函数返回一个值。

Generators with return和throw

在ES9中,我们引入了Generators with return和throw这两个新特性。它们让我们更加精细地控制Generator函数的执行。

return

在ES6中,Generator函数返回的是一个伪数组,其中包含一个value属性和一个done属性。当我们调用next()方法时,返回的值保存在value属性中。当Generator函数执行完成时,done属性被设置为true

在ES9中,我们可以使用return语句从Generator中返回一个完整的值,并将done属性设置为true。这使得我们可以在Generator函数中执行清理操作。

让我们看一个例子:

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

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

在上面的代码中,我们引用了一个try...finally代码块,以确保Generator函数执行完毕后执行清理操作。我们还使用了return语句,以从Generator函数中返回一个完整的值。最后,我们调用了next()方法,并打印了执行的清理操作。

throw

在ES6中,我们可以使用throw关键字在Generator函数中抛出错误。但是,我们无法将错误抛出到Generator函数之外。在ES9中,我们可以使用throw语句将错误抛出到Generator函数之外。

让我们看一个例子:

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

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

在上面的代码中,我们使用了try...catch语句捕捉了Generator函数内的错误。我们还使用了throw语句将错误传递到外部。最后,我们调用了next()方法,并输出了2

总结

Generators是JavaScript异步编程中非常有用的工具。在ES9中,我们引入了Generators with return和throw这两个重要的新特性,使得我们控制Generator函数的执行变得更加精细。使用ES9中引入的特性,在编写异步JavaScript代码时我们可以更加精细地控制执行流程。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64df01b1f6b2d6eab3a254f7

纠错
反馈