在现代网页应用程序中,异步调用已经成为了必要的技能。它可以让你的应用程序更好的响应用户的操作,同时也可以提高效率。在 ECMAScript 2018 中,也提供了多种异步调用的方式,让我们一起来看看吧。
Async / Await
Async / Await 是 ECMAScript 2018 中最常用的异步调用方式之一。Async / Await 让异步调用更加简单和可读,它是基于 Promises 语法的。
异步操作往往需要异步的回调函数来处理结果,然而异步回调函数的嵌套会使代码变得臃肿和难以维护。而 Async / Await 可以帮助我们避免这样的问题。
Async / Await 的作用是可以让我们像同步代码一样的写法来执行异步操作。具体来说,Async / Await 的写法就是把异步调用放在一个异步函数中(用 async 标记),然后在异步函数中使用 await 关键字来调用其他异步函数(Promise)。
下面是一个简单的 Async / Await 的示例:
-- -------------------- ---- ------- ----- -------- ------------- - --- ------ - ----- ----------- ------------------- - -------- ----------- - ------ --- --------------- -- - ------------- -- - --------------- -- ----- -- - -------------
在这个例子中,我们定义了一个 async function,它调用了另一个异步函数 getMyName(),我们使用了 await 关键字来等待该函数的返回结果,然后打印出来。
Promise.all()
使用 Promise.all() 来并行执行多个异步操作是一种很好的方式。它可以让多个异步操作同时执行,然后等到它们都结束之后再统一处理结果。
下面是一个包含三个异步操作的示例代码:
-- -------------------- ---- ------- --- -------- - --- --------------- -- - ------------- -- - ---------------- -- ----- -- --- -------- - --- --------------- -- - ------------- -- - ---------------- -- ----- -- --- -------- - --- --------------- -- - ------------- -- - ------------ -- ----- -- ---------------------- --------- ---------- ------------ -- -----------------------------
在这个例子中,我们定义了三个 Promise,它们分别在不同的时间执行,并返回了不同的结果。使用 Promise.all() 我们可以等到这三个 Promise 都执行完之后,再去处理它们的结果。
Promise.race()
Promise.all() 用于多个异步操作的并行执行,而 Promise.race() 则是用于多个异步操作的竞争执行。也就是说,Promise.race() 中的异步操作,只要有一个执行完毕,它就会返回结果。
下面是一个使用 Promise.race() 的例子:
-- -------------------- ---- ------- --- -------- - --- --------------- -- - ------------- -- - ---------------- -- ----- -- --- -------- - --- --------------- -- - ------------- -- - ---------------- -- ----- -- ----------------------- --------------------- -- -------------------
在这个例子中,我们定义了两个 Promise,使用了 Promise.race() 来执行这两个异步操作。由于 promise2 的执行时间比 promise1 短,我们最终会输出 'World'。
总结
ECMAScript 2018 提供了多种异步调用的方式,其中 Async / Await 是其中最常用的方式。它可以让我们像同步代码一样的写法来执行异步操作,避免了异步回调函数嵌套的问题。除此之外,Promise.all() 用于多个异步操作的并行执行,而 Promise.race() 则是用于多个异步操作的竞争执行。有了这些异步调用的方式,我们可以更好的编写响应性更强的应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/665571e8d3423812e4a10690