从最最经典的 ajax 请求开始今天的话题吧。 假如,我们要依次请求 url1 url2 url3 这3个地址。
一不小心就写成这样了。 如果你是 jQuery 粉的话,你可能会说也可以这样实现啊。
用 jQuery 的 Deferred 对象,类似 Promise 来规避回调地狱,看着确实平了,但体验并不是特别友好。
Generator 的基础这里就不展开说了,直接说应用。
这是比较友好的异步方式,但是还有个至关重要的因素,怎么运行这个 Generator 是个问题。 直接手动 g.next() 运行那肯定不行,鬼知道有多少个 yield。 我们要实现一个启动器来运行它,并把 Promise 结果传给下一次next,这样就实现了 yield 接收值的功能。
Generator 就启动起来了,并且一直执行到 done 为 true 为止。
可能你已经发现了,其实这就是 co 的原理,但 co 比这个例子严谨多了,而且api设计的也非常友好。 本篇到此也就结束了,利用 Generator 的 yield 功能实现参数回传,让代码看起来非常‘同步’,让异步体验变的更加友好。