美文网首页Nodejs程序员深究JavaScript
nodejs 代码设计模式1:同步函数变异步

nodejs 代码设计模式1:同步函数变异步

作者: htoo | 来源:发表于2016-05-13 22:09 被阅读169次

    同步函数变异步

    1 问题:

    1.1 碰到需要调用你刚正在创建的对像。

    function createServer(data, cb) {
        data.num = 1;
        cb();
        return data;
    }
    
    const test = {};
    let data = createServer(test, function() {
        console.log(data.num);// 调用你创建的对像
    });
    
    

    这时会报错Cannot read property 'num' of undefined

    因为回调函数调用时data对象还没有赋值,所以会报错。

    1.2 自己写函数时,需要一个回调函数,你希望是异步,但是实际是同步。

    
    function foo(s,cb){
      console.log(s);
      cb();
    }
    
    foo("run1",function() {
      console.log("callback");// 你希望这里的函数异步,在run后面输出,实际上这里在还是同步,没有达到效果。
    })
    
    console.log("run2");
    
    
    
    

    2 解决方案

    在nodejs中创一个异步的函数的调用方法有三种: setTimeout,setImmediate,process.nextTick

    第一个问题解决方案:

    function createServer(data, cb) {
        data.num = 1;
        process.nextTick(cb);
        // or setImmediate(cb);
        // or setTimeout(()=> cb(),0);
        return data;
    }
    
    const test = {};
    let data = createServer(test, function() {
        console.log(data.num);// 调用你创建的对像
    });
    
    
    

    第二个问题解决方案:

    function foo(s,cb){
      console.log(s);
      process.nextTick(cb);
      // or setImmediate(cb);
      // or setTimeout(()=> cb(),0);
    }
    
    foo("run1",function() {
      console.log("callback");// 你希望这里的函数异步,在run后面输出,实际上这里在还是同步,没有达到效果。
    })
    
    console.log("run2");
    
    

    3 总结

    在nodejs中,就三个方法可以使调用变成异步: setTimeout,setImmediate,process.nextTick,你直接使用process.nextTick就没有问题。

    相关文章

      网友评论

        本文标题:nodejs 代码设计模式1:同步函数变异步

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