[TypeScript] eventdata doorgeven naar functie

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Carharttguy
  • Registratie: Juli 2010
  • Laatst online: 04-07 23:09
Dag iedereen

Ik ben vrij nieuw met TS/JS en loop tegen een probleem aan.
Ik heb een websocket instance, daar krijg ik data van, en die moet ik zien te parsen.
Ik doe nu zoiets:

code:
1
2
3
4
5
6
7
 this._socketConnection.addEventListener('message', this._ProcessXojoMessages(event.data));
    }

    private _ProcessXojoMessages(data: String)
    {

    }


De oorspronkelijke voorbeeldcode is dit:

code:
1
2
3
socket.addEventListener('message', function (event) {
    console.log('Message from server', event.data);
});


Ik maak schijnbaar een denkfout, maar weet niet wat. Het probleem is dat die event.data niet herkend, hij maakt er onmiddellijk een void van.
Gewoon het event doorgeven werkt ook niet.

Hoe spreek ik de event parameter aan en geef ik die door naar een functie?

Danku

Beste antwoord (via Carharttguy op 03-07-2017 20:30)


  • Daos
  • Registratie: Oktober 2004
  • Niet online
addEventListener verwacht als tweede argument een functie die iets doet met een event. Wat jij hier doet is die functie meteen al uitvoeren. Dat is niet de bedoeling. Je moet alleen de naam meegeven aan addEventListener en dus die '(event.data)' weghalen. Jouw functie wordt dan automatisch aangeroepen als er een event is.

Verder krijgt die functie dus een event mee en niet een data string. Je _ProcessXojoMessages op regel 4 moet dus een event als parameter hebben.

Alle reacties


Acties:
  • 0 Henk 'm!

  • q-enf0rcer.1
  • Registratie: Maart 2009
  • Laatst online: 14:44
Volgens mij bedoel je zoiets als dit:
this._socketConnection.addEventListener('message', (event) => {
console.log('Message from server', event); // eerst even kijken wat er in event zit.
});
Er zitten nu nogal wat fouten in je originele code namelijk. Lijn 2 is bijvoorbeeld fout, maar wat je daarna doet met die method _ProcessXojoMessages snap ik ook niet. Moet dat iets opleveren?

Heb je ergens een git linkje anders naar het specifieke bestand?

[ Voor 8% gewijzigd door q-enf0rcer.1 op 03-07-2017 17:02 ]


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
addEventListener verwacht als tweede argument een functie die iets doet met een event. Wat jij hier doet is die functie meteen al uitvoeren. Dat is niet de bedoeling. Je moet alleen de naam meegeven aan addEventListener en dus die '(event.data)' weghalen. Jouw functie wordt dan automatisch aangeroepen als er een event is.

Verder krijgt die functie dus een event mee en niet een data string. Je _ProcessXojoMessages op regel 4 moet dus een event als parameter hebben.

Acties:
  • 0 Henk 'm!

  • Carharttguy
  • Registratie: Juli 2010
  • Laatst online: 04-07 23:09
q-enf0rcer.1 schreef op maandag 3 juli 2017 @ 17:00:
Volgens mij bedoel je zoiets als dit:


[...]


Er zitten nu nogal wat fouten in je originele code namelijk. Lijn 2 is bijvoorbeeld fout, maar wat je daarna doet met die method _ProcessXojoMessages snap ik ook niet. Moet dat iets opleveren?

Heb je ergens een git linkje anders naar het specifieke bestand?
Je begrijpt me verkeerd. Het enigste wat ik wil doen is een externe functie aanroepen, geen anonymous function gebruiken. Die kan ik namelijk niet hergebruiken.
Daos schreef op maandag 3 juli 2017 @ 17:09:
addEventListener verwacht als tweede argument een functie die iets doet met een event. Wat jij hier doet is die functie meteen al uitvoeren. Dat is niet de bedoeling. Je moet alleen de naam meegeven aan addEventListener en dus die '(event.data)' weghalen. Jouw functie wordt dan automatisch aangeroepen als er een event is.

Verder krijgt die functie dus een event mee en niet een data string. Je _ProcessXojoMessages op regel 4 moet dus een event als parameter hebben.
Hier heb ik wat aan inderdaad. Hetgeen jij zegt lukt inderdaad. De fout was dat ik de event data wou meegeven aan de functie, maar blijkbaar gebeurt dit automatisch in Javascript als de functie maar de juiste parameter verwacht (zijnde event).

Ik las op deze pagina dat een websocket message event geen Event krijgt, maar een MessageEvent, dus ik heb de code aangepast naar dit:

code:
1
2
3
4
5
6
this._socketConnection.addEventListener('message', this._ProcessXojoMessages);

    private _ProcessXojoMessages(me: MessageEvent)
    {

    }


Nu kan ik in _ProcessXojoMessages me.data ophalen en aan de slag met de ontvangen string.

Bedankt voor de hulp!