返回后执行功能

时间:2018-01-16 13:16:55

标签: node.js express

我在我的api中使用带有expressjs的nodejs。

我想在调用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
  }
}

这是真的,logthis返回后不会被中断;叫做 ? 还有一个更好的模式来做这个,比如一个事件队列监听器,这样我就把这个请求放在一个池中,并且只要有可能就执行它?

3 个答案:

答案 0 :(得分:1)

只有在您发出return语句之前,向客户端发送json响应或使用logthis语句才会阻止脚本执行return函数。

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内没有异步函数,则无需使用async关键字

答案 1 :(得分:0)

您可以简单地使用回调或承诺。 function(data,callback){     DB.find(........)      回调(ERR,数据)       //在这里做其他事情。

}

答案 2 :(得分:0)

使用

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