2016-05-22 3 views
0

Ich habe eine Frage. Ich versuche, Socket.io mit Typescript zu verwenden.Socket.io Typescript Benutzerdefinierte Argumente

Deshalb verwende ich diese Definitionen: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/socket.io-client/socket.io-client.d.ts

Nun zu meiner Frage. Wie muss ich die Methode socket.once verwenden, wenn ich die benutzerdefinierten Argumente "example: true" mit der Methode socket.emit sende?

Mein Code für den NodeJS Server:

socket.once("example-event-request", { 
    socket.emit("example-event-response", {example: true}); 
}); 

Browser, wenn die Daten benötigen:

socket.emit("example-event-request"); 

socket.once("example-event-response", (data) => { 
    this.example = data.example; 
}); 

hinzugefügt als Antwort (wahrscheinlich bald gelöscht werden):

Ich möchte dies mehr angeben. Ich muss diesen JavaScript-Code in Typescript mit den verknüpften Definitionen schreiben.

this.socket.once(eventName, function(){ 
    callback.apply(this.socket, args); 
}); 

this.socket.emit(eventName, data, function(){ 
    callback.apply(this.socket, args) 
}); 

Das Problem ist, dass ich nicht den args bekommen kann, weil es keine Typoskript Variable dafür ist.

Antwort

1

Die emit und die oncenicht auf der gleichen Seite sein. Sie emittieren von Server zu Client oder von Client zu Server. Und die once gehört auf die andere Seite.

Auch "{example: true}" sollte wahrscheinlich {example: true} sein, d. H. Ein serialisierbares json-Objekt (keine Zeichenkette).

Mehr

wenn Sie schauen, rpc zu tun habe ich ein Beispiel-Projekt (alm), die das (oder Inter-Prozess-IPC) über Buchse io abstrahiert: https://basarat.gitbooks.io/alm/content/contributing/async.html

+0

Sie war völlig richtig. Mein Beispielcode war falsch. Ich habe es aktualisiert. – Feeliiix

+0

welches ist der 'server' (node ​​js server) und welcher ist der' client' (browser) in deiner aktualisierten Frage – basarat

+0

Upps, der Webserver Beispiel ist der Browser. Scheitern. – Feeliiix