代码之家  ›  专栏  ›  技术社区  ›  JenuRudan

返回后执行函数

  •  3
  • JenuRudan  · 技术社区  · 8 年前

    我正在将nodejs与expressjs一起用于我的api。

    我想在调用res.json()之后调用一个函数。

    例如,api将数据提取到客户端,但我想记录该操作,但不需要让客户端等待请求响应,直到api保存日志

    module.exports = {
      getAll:async function(req,res){
        ////fetch data from db
        res.json({success:true,data:data});
        module.exports.logthis();
        return;
      },
      logthis: async function ()
      {
        //save log
      }
    }
    

    日志返回后不会被中断,这是真的吗;是否调用? 还有没有更好的模式可以做到这一点,比如事件队列侦听器,以便我将该请求扔到池中,并在可能的情况下执行它?

    3 回复  |  直到 8 年前
        1
  •  1
  •   YouneL    8 年前

    向客户端发送json响应或使用 return 语句不会停止脚本的执行 logthis 仅当您将 回来 之前的声明。

    module.exports = {
    
        getAll:async function(req,res){
    
            //fetch data from db
    
            res.json({success:true,data:data});
    
            this.logthis(data);
    
            return;
        },
    
        logthis: function (data) {
            // log data to file here
        }
    
    }
    

    记住这一点 async 功能与 await 语句,如果内部没有异步函数 getAll 没有必要使用 异步 关键字

        2
  •  0
  •   Oleksandr Kyrpa    8 年前

    您可以简单地使用回调或承诺。 函数(数据,回调){ 数据库。查找(………) 回调(错误,数据) //在这里做其他事情。

    }

        3
  •  0
  •   Tudor    8 年前

    使用

    res.json({success:true,data:data}).then(function(){
      //Enter your code here. res.json() has finished.
    });
    
    推荐文章