zoukankan      html  css  js  c++  java
  • 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就没有问题。

  • 相关阅读:
    TF-IDF
    3.路径模板两张表设计
    6.订单支付回调接口
    5.创建订单并生成支付链接接口
    5.使用ES代替whoosh全文检索
    4.docker基本使用
    3.ubuntu安装docker
    2.课程全文检索接口
    1.搜索引擎工作原理
    7.视频播放页面接口开发
  • 原文地址:https://www.cnblogs.com/htoooth/p/5491288.html
Copyright © 2011-2022 走看看