简单模拟CO模块
2024-09-01 13:22:09
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
*/
最新文章
- 解决远程连接mysql很慢的方法(mysql_connect 打开连接慢)
- H20的题——[noip2003]银河英雄传(并查集)
- jquery移动端日期插件
- 自由软件VS开源软件
- RazorEngine在非MVC下的使用,以及使用自定义模板
- Ibatis 后台打印完整的sql语句
- jQuery实现 图片的局部放大效果
- (一)java多线程之Thread
- CVTE前端笔试编程题
- python使用上下文管理器实现sqlite3事务机制
- 洛谷P2617 Dynamic Rankings
- shell脚本--文件包含
- 由于html元素加载导致的问题
- anaconda查看删除增加镜像源
- ajax test
- OpenGL ES 光照模型之——漫反射光(RenderMonkey测试,地球日出效果)
- 记:ASP.NET Core开发时部署到IIS上出现HTTP Error 502.5 - Process Failure的解决方案
- Class.forName(String name)方法,到底会触发那个类加载器进行类加载行为?
- ZH奶酪:VirtualBox虚拟机与主机ping不通
- 也谈matlab中读取视频的一个重要函数mmreader
热门文章
- python实现查找算法
- 【转】用 Consul 来做服务注册与服务发现
- CentOs 6语言改成中文
- Oracle数据库 — DDL:数据定义语言
- Http 请求头 响应体 详解
- 45、[源码]-Spring容器创建-执行BeanFactoryPostProcessor
- [Dart] Manipulate Lists/Arrays in Dart
- LeetCode 246. Strobogrammatic Number
- php常量和变量之变量引用
- How To Add User To Sudoers On Debian 10 Buster