nodeJS最大的特点就是其异步操作,其后边方法的执行不会等到前边方法执行完才去运行,而是同时执行好几个方法,这种方式在给我们提高效率的同时也给开发多多少少带来了不便,有时候我们不要求有这种效果的出现,这时候就需要进行去异步操作。
由于项目需要对于同一段代码[代码内部也可以异步]需要保证同步调用,网上又没有找到适合项目的库,只好自己写了个简单的模块。
var sync = module.exports = {};var _execOneByOne = function(events, i, callback){ //调度函数执行
if (i < events.length) {
var event = events[i];
event.func(function(err, result){
event.next(err, result);
_execOneByOne(events, i+1, callback);
});
} else {
callback(i);
}
};
var _seventsMap = {}; //函数表
sync.exec = function(name, func, next) { 注册函数
var event = {'func':func, 'next':next};
if (_seventsMap[name]) {
_seventsMap[name].push(event);
} else {
_seventsMap[name] = [event];
_execOneByOne(_seventsMap[name], 0, function(i) {
delete _seventsMap[name];
});
}
};
创建使用Demo
Sync = import('./sync');
function demo_call(){
var a = 0;
for (var i = 0; i < 10; i++) {
sync.exec('sync-demo', function(callback){
var k = a++;setTimeout(function () {
callback(null, k);
}, k % 2 === 0 ? 3000 : 1000);
}, function(err, result){
console.log(result);
});
}
};demo_call(); //执行
输出结果:0123456789
网友评论