Estoy usando nodejs con expressjs para mi api.

Quiero llamar a una función después de llamar a res.json ().

Por ejemplo, la API obtiene datos para el cliente pero quiero registrar esa acción, pero no es necesario que el cliente espere la respuesta de la solicitud hasta que la API guarde el registro

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
  }
}

Es cierto que esto no se interrumpirá después del retorno; se llama ? ¿También hay un mejor patrón para hacer esto, como un oyente de cola de eventos para que arroje esa solicitud en un grupo y se ejecute siempre que sea posible?

1
JenuRudan 16 ene. 2018 a las 16:16

3 respuestas

La mejor respuesta

Enviar una respuesta json al cliente o usar la instrucción return no impedirá que el script ejecute la función logthis solo si coloca la instrucción return antes.

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
    }

}

Recuerde que la función async funciona junto con la instrucción await, si no tiene funciones asincrónicas dentro de getAll no hay necesidad de usar la palabra clave async

1
YouneL 16 ene. 2018 a las 13:45

Simplemente puede usar la devolución de llamada o la promesa en su lugar. function (data, callback) {DB.find (........) callback (err, data) // Haz otras cosas aquí.

}

0
Oleksandr Kyrpa 16 ene. 2018 a las 13:31

Uso

res.json({success:true,data:data}).then(function(){
  //Enter your code here. res.json() has finished.
});
0
Tudor 16 ene. 2018 a las 13:40