Forma correcta de usar allEvents()

Estoy tratando de obtener todos los eventos para un contrato:

let events = token.allEvents({fromBlock: creationBlock, toBlock: 'latest'}, (err, res) => {
    try {
        let result = events.get();
        console.log(result);            
    } catch (error) {
        console.error(error);            
    }
});

Por alguna razón, el código de devolución de llamada se llama cada vez que se encuentra un evento. Podría vivir con eso, pero si no hay eventos, la devolución de llamada nunca se llama. Estoy tratando de enumerar todos los eventos para un contrato (no estoy interesado en ver eventos).

Cuando trato de usarlo de forma sincrónica, events.get()arroja un error que dice que los métodos sincrónicos no son compatibles.

"Por alguna razón, el código de devolución de llamada se llama cada vez que se encuentra un evento". Ese es el comportamiento esperado. Estoy un poco confundido acerca de lo que estás tratando de hacer. ¿Podrías explicar? ¿Quizás dar un ejemplo?
@smarx Necesito obtener todos los eventos emitidos por mi contrato.

Respuestas (1)

Resultó que no debería haber usado la devolución de llamada en este caso. Aquí está el código de trabajo:

let events = token.allEvents({fromBlock: creationBlock, toBlock: 'latest'});
events.get((error, events) => {
    if (error)
        console.log('Error getting events: ' + error);
    else
        return res.json(events);
});
Creo que esta es solo una forma más larga de escribir el código que usa una devolución de llamada. (La devolución de llamada ya se invoca para cada evento que ocurre. Creo que el problema es que luego estaba llamando getnuevamente en lugar de simplemente registrar el evento).
Estoy escribiendo un controlador de back-end que necesita devolver todos los eventos pasados ​​​​al cliente. Entonces, esperar hasta que suceda un evento no es una opción para mí. El uso de una devolución de llamada para allEventssería útil para un código de interfaz que muestra eventos en tiempo real.
Oh, lo siento, me acabo de dar cuenta de que estás haciendo geten lugar de watch. La devolución de llamada proporcionada a allEventses equivalente a watch.
Bien, es bueno saberlo. No pude encontrar nada en los documentos que explique esto.