美文网首页
nodejs同步调用

nodejs同步调用

作者: 笙箫竽笛 | 来源:发表于2019-02-27 17:38 被阅读0次

    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

    相关文章

      网友评论

          本文标题:nodejs同步调用

          本文链接:https://www.haomeiwen.com/subject/ltmfuqtx.html