摘要: 夸张点说,技术的发展与历史同样,顺之者昌,逆之者亡。JS开发者们,赶忙拥抱Async/Await吧!javascript
早在半年多以前,我就在鼓吹Async/Await替代Promise的6个理由,彷佛还招致了一些批评。然而,直到最近,我才真正开始进行代码重构,抛弃Promise,全面使用Async/Await。由于,Node 8终于LTS了!html
是的是的。前端
这些天,我大概重构了1000行代码,最大的感受是代码简洁了不少:java
下面,咱们能够经过一个很是简单的示例来体验一下Async/Await的酸爽:node
const Promise = require("bluebird") |
由示例可知,使用Async/Await极大地简化了代码,使得代码可读性提升了很是多。git
是的是的。程序员
对于Async/Await替代Promise的6个理由,批评者执着于Async/Await是基于Promise实现的,所以替代这个词不许确,这就有点尴尬了。github
一方面,这里替代的是异步代码的编写方式,并不是彻底抛弃你们心爱的Promise,地球人都知道Async/Await是基于Promise的,不用太伤心;另外一方面,Promise是基于回调函数实现的,那Promise也没有替代回调函数咯?后端
重构代码以后,我仍然用到了Promise库bluebird。”Talk is cheap, Show me the code!”,你们不妨看看两个示例。api
使用Promise.promisify将不支持Promise的方法Promise化,调用异步接口的时候有两种方式:
const Promise = require("bluebird") |
Fundebug是全栈JavaScript错误监控平台,支持各类前端和后端框架,能够帮助您第一时间发现BUG!
使用Promise.map读取多个文件的数据,调用异步接口的时候有两种方式:
const Promise = require("bluebird") |
没错,个人确使用了Promise库,readFile与Promise.map都是Promise函数。可是,在调用readFile与Promise.map函数时,使用Async/Await与使用Promise是两种不一样写法,它们是相互替代的关系。
有啊有啊。
使用了await的函数定义时要加一个async,调用异步函数的时候须要加一个await,这玩意写多了也觉着烦,有时候还容易忘掉。不写async代码直接报错,不写await代码执行会出错。
const Promise = require("bluebird") |
既然Async/Await写着有点添乱,可不能够不写呢?我想之后应该是能够的,只要可以自动识别异步代码就好了,这应该也是将来的发展方向。至于说如何实现,那我就不知道了哎。
JavaScript的异步编写方式,从回调函数到Promise再到Async/Await,表面上只是写法的变化,本质上则是语言层的一次次抽象,让咱们能够用更简单的方式实现一样的功能,而程序员不须要去考虑代码是如何执行的。在我看来,这样的进步应该不会中止,有一天咱们也许不用写Async/Await了!
版权声明: 转载时请注明做者Fundebug以及本文地址: https://blog.fundebug.com/2017/12/13/reconstruct-from-promise-to-async-await/