我一直很奇怪的一个问题是,async/await 比 yield 好在哪里?除了前者是标准,而后者比较 hack 之外。
在我眼中,前者作为标准,应该是会来到的。而后者作为一种 hack 的方式,虽然不是 generator 的本意,但它的实现既不会发生大的更改,也不会 deprecated。那么 yield 的用法就可以一直用下去,不用担心后续兼容的问题。
就功能来说,我觉得 await 只是 yield 的子集。yield 可以接收数组来并发,也可以接收 object 来并发。而 await 貌似只能一次执行一个 promise 吧?
就使用习惯的发展来看,大家在用 await 的过程中,由于 await 是一个语言上的实现,所以只能按js设计者的意思工作,而去看看 co 的实现,会发现 yield 只是起了中介的作用,你可以让 yield 接受各种参数,只要说得过去。这也是为什么 yield 能把 promise 和 chunk 一视同仁的原因。
这么说起来,我感觉 yield 是比 await 优越的。