简单模拟CO模块
Posted Lorem
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单模拟CO模块相关的知识,希望对你有一定的参考价值。
promise方式:
// 对co模块的简单模拟 function run(gen){ var g = gen(); function next(data){ var result = g.next(data); if (result.done) return result.value; result.value.then(function(data){ next(data); }); } next(); } function a(aa){ return new Promise(function (resolve, reject){ setTimeout(function (){ console.log(aa); resolve(‘dataA‘); }, 1000); }); } function b(bb){ return new Promise(function (resolve, reject){ setTimeout(function (){ console.log(bb); resolve(‘dataB‘); }, 1000); }); } function *gen(){ console.log(yield a(‘aa‘)); console.log(yield b(‘bb‘)); } run(gen); /* 等一秒 aa dataA 等一秒 bb dataB */
thunk方式:
// 对co模块的简单模拟 function run(fn) { var gen = fn(); function next(err, data) { var result = gen.next(data); if (result.done) return; result.value(next); } next(); } var Thunk = function(fn){ return function(...args){ return function(callback){ return fn.call(this, ...args, callback); }; }; }; function a(aa, cb){ setTimeout(function (){ console.log(aa); cb(null, ‘dataA‘); }, 1000); } function b(bb, cb){ setTimeout(function (){ console.log(bb); cb(null, ‘dataB‘); }, 1000); } var aThunk = Thunk(a); var bThunk = Thunk(b); function *gen(){ console.log(yield aThunk(‘aa‘)); console.log(yield bThunk(‘bb‘)); } run(gen); /* 等一秒 aa dataA 等一秒 bb dataB */
以上是关于简单模拟CO模块的主要内容,如果未能解决你的问题,请参考以下文章
如何使用模块化代码片段中的LeakCanary检测内存泄漏?