我有一个websocketService,其中有send()
- 方法:
sendQuery() {
....
this.wsConnection = new WebSocket(this.url);
this.wsConnection.onopen = () => this.wsConnection.send(reqObj);
this.wsConnection.onerror = event => console.log('A Error has occured!');
this.wsConnection.onclose = event => console.log('Connection closed');
this.wsConnection.onmessage = (event) => {
this.result = JSON.parse(event.data);
// return here ? no way, this only exits the onmessage()
};
// return here? nope.. stayes undefined as the onmessage runs async
}
我确实从一个组件触发了这个方法,其中注入了websocketService。现在我需要从onmessage()
返回到父组件。
我现在正在寻找几天,但我无法找到解决方案,如何做到这一点。有人能把我推向正确的方向吗?
答案 0 :(得分:1)
由于所有这些都是异步发生的,因此您需要创建组件可以订阅的Observable
。然后在您的回调中,您可以next
或complete
观察。
类似的东西:
sendQuery(): Observable<MyType> {
return Observable.create(s => {
//All your code
ws.onmessage(msg => {
s.next(msg);
s.complete(); //If you are done with the observable
}
});
}
话虽如此,奇怪的是你只需要打开和关闭一个查询的WS连接。毕竟,WS的重点是持久。在这种情况下,我会将Subject
(这种类型取决于您的需求)作为一个服务属性,以Observable
公开,onmessage
只有next
才会触发它rlang
数据