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


    同步函数变异步

    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就没有问题。

  • 相关阅读:
    微信·小程序开发工具安装指南及注意事项
    测试
    PC上面的蓝牙的通信(C#)
    关于图片在div中居中问题
    JSONP---跨域请求问题
    关于position的用法
    APICloud自学笔记总结1
    前端html5
    关于图片自适应div大小问题
    亲身经历——大体量公司能为程序员的生涯带来什么帮助?
  • 原文地址:https://www.cnblogs.com/htoooth/p/5491288.html
Copyright © 2020-2023  润新知