es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener la posición de la iteración en trabajos repetibles en Bull.js

Me gustaría realizar algunas acciones en una posición específica dentro de la devolución de llamada del trabajo repetible, por ejemplo

const Bull = require('bull');
const queue = new Bull('payment');

// debería repetir esta tarea cada 5 minutos, 24 veces
queue.add('trackPayment', anyData, {
    repeat: {
        every: 300000,
        limit: 24,
    }
});

queue.process('trackPayment', async (data) => {
// este trabajo tiene un límite de 24 iteraciones
// me gustaría hacer alguna acción en la iteración #24
/*
   if (data.iteration == 24) doAction();
*/
})
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para realizar una acción en una posición específica dentro del callback de un trabajo repetible, puedes utilizar el argumento data que se pasa a la función de callback proporcionada en el método queue.process(). Este argumento data contiene información sobre el trabajo actual que se está procesando, incluido el número de veces que se ha procesado.

    En el ejemplo proporcionado, puedes acceder al argumento data en la función de callback para el trabajo trackPayment y verificar si la iteración actual es igual al límite de 24. Si es así, puedes llamar a la función para realizar la acción deseada.

    Aquí tienes una versión actualizada del código con la adición de esta lógica:

    const Bull = require('bull');
    const queue = new Bull('payment');
    
    // repetir esta tarea cada 5 minutos, 24 veces
    queue.add('trackPayment', anyData, {
        repeat: {
            every: 300000,
            limit: 24,
        }
    });
    
    queue.process('trackPayment', async (data) => {
        // verificar si la iteración actual es igual al límite de 24
        if (data.opts.repeat.iterations === 24) {
            // realizar la acción deseada
            doAction();
        }
    });
    
    function doAction() {
        // código para realizar la acción deseada
    }
    

    En el código anterior, la propiedad data.opts.repeat.iterations se utiliza para acceder al recuento de la iteración actual del trabajo que se está procesando. Si es igual a 24, se llama a la función doAction() para realizar la acción deseada.

Comments are closed.