Async Function VS Promise
异步函数的优势
异步函数对异步编程来说,有非常很大的提升。尤其在 try/catch/throw
方面,异步函数可以延续以前的标准写法,还能正常检索堆栈信息,优势非常大。
Promise 的价值
不过就目前来看,Promise (暂时)并不会被完全取代。
异步函数依赖 Promise
异步函数返回的是一个 Promise 对象;await
关键字只能等待 Promise 对象完成操作。
所以 Promise 的知识都还有效,大家也必须学习 Promise,才能更好的使用异步函数。
Promise 能更好的提供队列操作,并且在对象之间传递
Promise 本身是一个对象,所以可以在代码中任意传递。这意味着我们可以在程序的任何位置使用和维护队列,非常方便。
比如我们做一些办公产品,用户可能先做了 A,然后又做了 B。A 和 B 之间存在很强的先后顺序,不能乱。这个时候,队列的价值就能充分提现出来。
异步函数的支持率还不够
从上一节最后的截图可以看到,虽然异步函数的支持率已经很高了,但是在 iOS 10.2、Android 4 等关键平台上,还没有原生实现。这就需要我们进行降级兼容。
然而异步函数的降级代码很难写,Babel 转译后至少要增加3000行,对于一些轻量级应用来说代价不小。如果应用本身不大,或者异步操作并不复杂,用 Promise 可能是更好的选择。
小结
Promise 和异步函数之间不存在替代关系,根据需求和场景选择合适的技术,永远不会错。