微信号:FrontDev

介绍:分享 Web 前端相关的技术文章、工具资源、精选课程、热点资讯

用 Async 函数简化异步代码

2018-06-13 20:00 前端大全

(点击上方公众号,可快速关注)


英文:Joe Zimmerman&Nilson Jacques  译文:oschina

www.oschina.net/translate/simplifying-asynchronous-coding-es7-async-functions


Promise 在 JavaScript 上发布之初就在互联网上流行了起来 — 它们帮开发人员摆脱了回调地狱,解决了在很多地方困扰 JavaScript 开发者的异步问题。但 Promises 也远非完美。它们一直请求回调,在一些复杂的问题上仍会有些杂乱和一些难以置信的冗余。


随着 ES6 的到来,除了引入 Promise 的规范,不需要请求那些数不尽的库之外,我们还有了生成器。生成器可在函数内部停止执行,这意味着可把它们封装在一个多用途的函数中,我们可在代码移动到下一行之前等待异步操作完成。突然你的异步代码可能就开始看起来同步了。


这只是第一步。异步函数因今年加入 ES2017,已进行标准化,本地支持也进一步优化。异步函数的理念是使用生成器进行异步编程,并给出他们自己的语义和语法。因此,你无须使用库来获取封装的实用函数,因为这些都会在后台处理。


运行文章中的 async/await 实例,你需要一个能兼容的浏览器。


运行兼容


在客户端,Chrome、Firefox 和 Opera 能很好地支持异步函数。



从 7.6 版本开始,Node.js 默认启用 async/await。


异步函数和生成器对比


这有个使用生成器进行异步编程的实例,用的是 Q 库:


var doAsyncOp = Q.async(function* () {

  var val = yield asynchronousOperation();

  console.log(val);