Richtige Art der Verwendung von allEvents()

Ich versuche, alle Ereignisse für einen Vertrag zu erhalten:

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

Aus irgendeinem Grund wird der Rückrufcode jedes Mal aufgerufen, wenn ein Ereignis gefunden wird. Damit könnte ich leben, aber wenn es keine Events gibt, wird der Callback nie aufgerufen. Ich versuche, alle Ereignisse für einen Vertrag aufzulisten (nicht daran interessiert, nach Ereignissen zu suchen).

Wenn ich versuche, es synchron zu verwenden, events.get()wird ein Fehler ausgegeben, der besagt, dass synchrone Methoden nicht unterstützt werden.

"Aus irgendeinem Grund wird der Rückrufcode jedes Mal aufgerufen, wenn ein Ereignis gefunden wird." Das ist das erwartete Verhalten. Ich bin ein bisschen verwirrt darüber, was du zu tun versuchst. Könntest du erklären? Vielleicht ein Beispiel geben?
@smarx Ich muss alle Ereignisse erhalten, die von meinem Vertrag ausgegeben werden.

Antworten (1)

Es stellte sich heraus, dass ich in diesem Fall den Rückruf nicht hätte verwenden sollen. Hier ist der Arbeitscode:

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);
});
Ich glaube, dies ist nur eine längere Art, den Code zu schreiben, der einen Rückruf verwendet. (Der Rückruf wird bereits für jedes auftretende Ereignis aufgerufen. Ich denke, das Problem ist, dass Sie dann geterneut angerufen haben, anstatt nur das Ereignis zu protokollieren.)
Ich schreibe einen Backend-Handler, der alle vergangenen Ereignisse an den Client zurückgeben muss. Warten, bis ein Ereignis eintritt, ist für mich also keine Option. Die Verwendung eines Rückrufs für allEventswäre praktisch für einen Frontend-Code, der Ereignisse in Echtzeit anzeigt.
Oh, tut mir leid, habe gerade gesehen, dass du getstatt watch. Der an gelieferte Callback allEventsist äquivalent zu watch.
Ok, gut zu wissen. Ich konnte nichts in den Dokumenten finden, das dies erklärt.