译者按: Node.js的异步编程方法有效进步了应用机能;然而回调地狱却让人望而却步,Promise让我们拜别回调函数,写出更优雅的异步代码;在实践过程中,却发明Promise并不完美;技巧进步是无尽头的,这时,我们有了Async/Await。
Node.js 7.6已经支撑async/await了,如不雅你还没有试过,这篇博客将告诉你为什么要用它。
对于Async/Await,也许你有一些合理的困惑:
- 它使得异步代码不在明显: 我们已经习惯了用回调函数或者.then来辨认异步代码,我们可能须要花数个礼拜去习惯新的标记。然则,C#拥有这个特点已经很多年了,熟悉它的同伙应当知道临时的稍微不方就是值得的。
- Node 7不是LTS(经久支撑版本): 然则,Node 8下个月就会宣布,将代码迁徙到新版本会异常简单。
Async/Await简介
对于大年夜未据说过async/await的同伙,下面是简介:
- async/await是写异步代码的新方法,以前的办法有回调函数和Promise。
- async/await是基于Promise实现的,它不克不及用于通俗的回调函数。
- async/await与Promise一样,长短浊宣的。
- async/await使得异步代码看起来像同步代码,这恰是它的魔力地点。
应用Promise是如许的:
- const makeRequest = () =>
- getJSON()
- .then(data => {
- console.log(data)
- return "done"
- })
- makeRequest()
应用Async/Await是如许的:
- const makeRequest = async () => {
- console.log(await getJSON())
- return "done"
- }
- makeRequest()
它们有一些细微不合:
- 函数前面多了一个aync关键字。await关键字只能用在aync定义的函数内。async函数会隐式地返回一个promise,该promise的reosolve值就是函数return的值。(示例中reosolve值就是字符串”done”)
- 第1点暗示我们不克不及在最外层代码中应用await,因为不在async函数内。
- // 不克不及在最外层代码中应用await
- await makeRequest()
- // 这是会出工作的
- makeRequest().then((result) => {
- // 代码
- })
await getJSON()表示console.log会比及getJSON的promise成功reosolve之后再履行。
为什么Async/Await更好?
1. 简洁
由示例可知,应用Async/Await明显节约了不少代码。我们不须要写.then,不须要写匿名函数处理Promise的resolve值,也不须要定义多余的data变量,还避免了嵌套代码。这些小的长处会敏捷累计起来,这在之后的代码示例中会加倍明显。
2. 缺点处理
Async/Await让try/catch可以同时处理同步和异步缺点。鄙人面的promise示例中,try/catch不克不及处理JSON.parse的缺点,因为它在Promise中。我们须要应用.catch,如许缺点处理代码异常冗余。并且,在我们的实际临盆代码会加倍复杂。
- const makeRequest = () => {
- try {
- getJSON()
- .then(result => {
- // JSON.parse可能会掉足
推荐阅读
Android Studio jni开发入门——看我就够了!
至此就成功运行出jni的Hello World了 一、情况设备重要须要设备的就是NDK(Native Development Kit),如今Android studio很便利,可以一键下载: file → setting → 按截图找到如>>>详细阅读
本文标题:Async/Await替代Promise的6个理由
地址:http://www.17bianji.com/lsqh/34696.html
1/2 1