似乎大部分JS的文章都会拿callback hell来做开场白
那我也拿了。↑
从ES6出来就听说有一种来自黑魔法:“用同步的写法处理异步问题”;
直到接触egg.js,我才开始研究他的实现方式。经过2个钟头的试错,终于得出了一个简陋的结果。
贴上代码
1、首先把所有需要异步处理的内容封装成Promise。
2、主函数是一个Generator函数。
3、执行主函数不是单纯调用主函数,而是判断yield回来的是不是Promise对象。
4、如果是Promise对象,那么then一下,把resolve的数据传入下个next中。
5、这时候如图中,主逻辑中的"var result = " ,就被赋值了Promise的resolve结果了。
这样写的好处是让主逻辑本该的异步代码变成同步代码写法,用ES6 Generator的特性,把主逻辑的函数执行权交给了Promise对象。
有种“协程”的感觉。
网友评论