作家
登录

Async/Await替代Promise的6个理由

作者: 来源: 2017-04-11 08:59:46 阅读 我要评论

译者按: 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是如许的:

  1. const makeRequest = () => 
  2.  
  3.   getJSON() 
  4.  
  5.     .then(data => { 
  6.  
  7.       console.log(data) 
  8.  
  9.       return "done" 
  10.  
  11.     }) 
  12.  
  13. makeRequest() 

应用Async/Await是如许的:

  1. const makeRequest = async () => { 
  2.  
  3.   console.log(await getJSON()) 
  4.  
  5.   return "done" 
  6.  
  7.  
  8. makeRequest() 

它们有一些细微不合:

  • 函数前面多了一个aync关键字。await关键字只能用在aync定义的函数内。async函数会隐式地返回一个promise,该promise的reosolve值就是函数return的值。(示例中reosolve值就是字符串”done”)
  • 第1点暗示我们不克不及在最外层代码中应用await,因为不在async函数内。
  1. // 不克不及在最外层代码中应用await 
  2.  
  3. await makeRequest() 
  4.  
  5. // 这是会出工作的 
  6.  
  7. makeRequest().then((result) => { 
  8.  
  9.   // 代码 
  10.  
  11. }) 

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,如许缺点处理代码异常冗余。并且,在我们的实际临盆代码会加倍复杂。

  1.     const makeRequest = () => { 
  2.  
  3.       try { 
  4.  
  5.         getJSON() 
  6.  
  7.           .then(result => { 
  8.  
  9.             // JSON.parse可能会掉足 
     1/5    1 2 3 4 5 下一页 尾页

      推荐阅读

      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

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)