Promise 中 await 关键字的使用注意事项

引言

Promise 是 JavaScript 中的一种异步处理方式,它可以帮助我们更加高效地执行一些异步操作。而 await 是 Promise 中的一个关键字,它可以帮助我们在 async 函数中更加便捷地使用 Promise。本文将会详细介绍 Promise 中 await 的使用注意事项,希望能够帮助读者更好的理解 Promise 的使用。

await 的使用方式

在 async 函数中,我们可以通过 await 关键字等待一个 Promise 的完成。当 await 关键字碰到一个 Promise 的时候,它会停止函数的执行,直到该 Promise 被 resolved 或者 rejected。同时,await 关键字会将 Promise 返回值赋予等待它的变量。

举个例子,假设我们有一个函数 foo,它返回一个 Promise。

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

我们可以在另一个 async 函数中等待这个 Promise 的完成。

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

在调用 foo 函数时使用了 await 关键字,这样程序会等待 Promise 被 resolved 才会执行后面的代码。在 Promise 完成之后,await 会将 resolve 的值赋给 result 变量。因此,最终在控制台输出的结果就是 'foo'。

注意事项

虽然 await 可以让我们在 async 函数中更方便地使用 Promise,但是在使用 await 的时候,我们需要注意以下几点。

1. 不应在顶层代码使用 await

顶层代码是指不在任何函数或者块语句内部的 JavaScript 代码。如果在顶层代码中使用 await,会导致以下错误。

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

这是因为 await 只能用于 async 函数中,而顶层代码并不是 async 函数。

2. await 只能用于 Promise 对象

await 只能用于 Promise 对象。如果 await 后面跟的不是 Promise 对象,那么 await 会将其转换为一个 resolved 的 Promise 对象,其值为跟在 await 后面的表达式的值。

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

在上面这个例子中,虽然 await 后面跟的是一个数字类型,但是 await 会把它转换为一个 resolved 的 Promise 对象,其值为 123。因此,在控制台输出的结果就是 123。

3. await 前面的 Promise 可能会被 reject

await 前面的 Promise 可能会被 reject,因此在使用 await 的时候,一定要配合 try...catch 使用,以捕获用 await 等待的 Promise reject 时的错误,避免程序崩溃。

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

在上面这个例子中,如果 foo 返回的 Promise 被 reject,那么程序会跳转到 catch 中,输出错误信息。

结论

在本文中,我们详细介绍了 Promise 中 await 的使用方式以及注意事项,希望读者能够了解 await 的本质和使用方法,并能够在项目中更加灵活地使用 Promise 和 await,提高工作效率。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672b3e60ddd3a70eb6d244d1