专栏名称: OSC开源社区
OSChina 开源中国 官方微信账号
目录
相关文章推荐
腾讯技术工程  ·  腾讯Kuikly框架鸿蒙版正式开源 —— ... ·  3 天前  
京东零售技术  ·  在京东 探索技术的无限可能 ·  2 天前  
程序员技术  ·  前美团员工求助:在美团背了个C绩效,慌得不行 ... ·  23 小时前  
51好读  ›  专栏  ›  OSC开源社区

Async/Await 优于 Promise 的 6 个理由

OSC开源社区  · 公众号  · 程序员  · 2017-04-17 08:31

正文

请到「今天看啥」查看全文


它们的区别在于


  • 我们的函数前有 async 关键字。await 关键字只能在定义为 async 的函数中使用。所有 async 函数都会隐式地返回 Promise,而函数的返回值将作为 Promise 兑现的值 (本例中是字符串 "done")。

  • 上一条意味着我们不能在顶层代码中使用 await,因为那不在任何 async 函数中。


  • await getJSON() 意思是 console.log 会在 getJSON() 返回的 Promise 兑现出返回的值时再进行打印。


为什么它更好呢?


1. 简明整洁


看看我们并没有写多少代码! 即使在上面的例子中,也很清楚明了,我们节省了大量的代码。 我们不必编写.then,不必创建一个匿名函数来处理响应,不必将命名数据传递给我们不需要使用的变量。


我们也避免了嵌套代码。 这些小的优点叠加起来,这在下面的代码示例中将会变得更加明显。


2. 错误处理


Async/await 使得用同一种构造(古老但好用的 try/catch ) 处理同步和异步错误成为可能。在下面的 promises 示例中,因为错误发生在 promises 中,try/catch 将不会处理 JSON.parse 失败的情况。


我们需要在 promise 中调用 .catch ,并复制我们的错误处理代码,这将可能比你的生产就绪代码中的 console.log 更复杂。



现在看看相同的 async/await 调用代码。catch 模块现在可以处理 parsing 错误了。



3. Conditionals


设想一下像下面的代码,它会获取一些数据,并决定是否应该返回该数据,或者根据数据中的某些值获取更多信息。



仅仅是看着这些就让你头疼了。很容易迷失在所有嵌套中(6级),大括号和返回语句中,而这些仅仅是在将最终结果传递给主 promise 中所需要的。

当用 async/await 重写时,此示例变得更易于阅读。









请到「今天看啥」查看全文