nodejs同步调用

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容