在ES7中,JavaScript中引入了Async函数的概念。如今,在ES8中,我们还引入了另一个重要的功能:Async/Await。尽管异步编程的已经成为了一种普遍的编程方式,但是使用callback/ promise依然是一种繁琐的任务,特别是在链式调用中。async/await的出现正是为了解决这些问题。ES8中Async/Await的这一新特性的出现确实让JavaScript语言更加灵活和强大。
什么是async/await?
Async和Await结合起来使用,提供了一种更为易于理解的方式来执行异步操作。异步函数(async function)声明用于定义一个异步函数(异步函数是语言提供的一种简化的异步编程方式,其基于Generators和Promises,使用Async/Await能够使异步程序具有串行的行为),同时也会返回一个Promise。await运算符被放置于一个async函数调用之前,它会暂停该函数的执行直到Promise被解决为止。使用async/await能够更简洁清晰地表达异步编程的复杂性,同时代码的可读性也得到了极大的提升。
如何使用async/await?
在正式介绍如何使用async/await之前,先来看一个示例,在这个示例中,使一个异步函数的调用变得简单和流畅:
-- -------------------- ---- ------- -------- ------------------ - ------ --- --------------- -- - ------------- -- ---------------- ----- -- - ----- -------- ------------- - ----------------- -------------------- - ------------------ -------------- ------------------
该代码示例输出如下。
之前 (2秒延迟) 操作完成 之后
首先,编写一个返回Promises的异步函数doSomethingAsync。接着,定义一个名为doSomething的async函数,并使用await运算符暂停该函数的执行,直到Promises被解决。当Promises被解决后,console.log将输出结果。
在运行时的输出结果中,使用“之前”、“之后”、“操作完成”的字符串,我们就可以发现,await函数调用已经被正确处理,并且整个程序的执行流程也是异步的。
async/await的指导意义
async/await对于JavaScript异步编程很有指导意义。其用法可以让代码更具可读性和可维护性,同时也会减少代码出错的机率。与promise相比,async/await可以实现多个异步代码的流畅操作和更显著的代码简化(个人认为,前端中使用async/await完成“调用A,执行A的回调,由A回调去调用B,执行B的回调,由B回调去调用C”这种多层回调的操作就显得尤为简单)。
而与使用callbacks相比,async/await的可读性会极大地提高,因为它们封装了callback/then语法,使得异步代码看起来更像是诸如同步代码那样的线性执行。
总结
简单来说,async/await提供了与Promise,Callback方法不同的异步编程范式。Async/await偏向于流控制,并提供了大量的语法糖,同步代码性质以及更简洁的语法和更可读性的实现。async和await的使用会使JavaScript编程变得更加轻松,无论是一些最简单或最复杂的异步编程场景。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6478493d968c7c53b048891b