在 JavaScript 中,异步操作是很常见的。由于这些操作需要等待一定时间才能返回结果,它们的执行顺序可能会发生变化,从而导致代码行为出现难以预料的问题。为了解决这个问题,我们需要对异步操作进行控制,以确保它们按照正确的顺序执行。
本文将介绍 ECMAScript 2020 (ES11) 中的异步流程控制方法,包括 Promise.allSettled、for-await-of、可选链、空值合并操作符等,并提供实例代码来帮助您更好地理解和使用这些方法。
Promise.allSettled
Promise.allSettled 方法返回一个 Promise 对象,该对象在所有 Promise 实例都已完成时才变为 resolved 状态。与 Promise.all 不同的是,Promise.allSettled 的返回值会包含所有 Promise 实例的状态,而不仅仅是 resolved 或 rejected。
示例代码:
-- -------------------- ---- ------- ----- -------- - - -------------------------- --------------- ------------------------- ---- --------- -------------------------- ------------ -------- -- ---------------------------- ------------- -- --------------------- ------------ -- --------------------展开代码
输出结果:
[ {status: "fulfilled", value: "Completed Successfully"}, {status: "rejected", reason: "Completed with errors"}, {status: "fulfilled", value: "Completed Successfully Again"} ]
for-await-of
for-await-of 循环用于遍历异步对象(比如 Promise 实例)中的所有值。它能够帮助我们处理顺序问题,保证异步操作在正确的顺序下执行。
示例代码:
-- -------------------- ---- ------- ----- -------- --------------- - ----- -------- - --- --------------- -- ------------- -- ---------------- ---- ------- ----- -------- - --- --------------- -- ------------- -- ---------------- ---- ------- --- ----- ------ ------ -- ------ --------- ----- ---------- - -------------------- - - ----------------展开代码
输出结果:
Promise 1 Promise 2
可选链
可选链操作符 ?.
可以让我们从深嵌套的对象中安全地取值。
示例代码:
-- -------------------- ---- ------- ----- ---- - - ----- - ----- -------- -------- - ----- ---- ----------- -- -- -- --------------------------------------- -- -- ---- ---------- -------------------------------------- -- -- ---------展开代码
空值合并操作符
空值合并操作符 ??
可以帮助我们处理 JavaScript 中的空值问题。当运算符左侧的值为 null 或 undefined 时,它会返回右侧的值。
示例代码:
const result1 = null ?? 'Default Value'; const result2 = undefined ?? 'Default Value'; const result3 = 'Hello' ?? 'Default Value'; console.log(result1); // 输出 'Default Value' console.log(result2); // 输出 'Default Value' console.log(result3); // 输出 'Hello'
结论
本文介绍了 ECMAScript 2020 (ES11) 中的一些异步流程控制方法,包括 Promise.allSettled、for-await-of、可选链、空值合并操作符等。这些方法可以帮助我们更好地控制异步操作的执行顺序,从而避免代码行为出现难以预料的问题。
当然,这些方法只是 ECMAScript 2020 (ES11) 中异步流程控制的一部分,实际上还有很多其他的 API(比如 async/await),您可以通过学习它们更好地掌握 JavaScript 中的异步编程。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6749bb2aa1ce0063546ecf50