Angular5 - 基本的回调理解

时间:2018-02-13 15:58:30

标签: angular callback

我有一个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()返回到父组件。

我现在正在寻找几天,但我无法找到解决方案,如何做到这一点。有人能把我推向正确的方向吗?

1 个答案:

答案 0 :(得分:1)

由于所有这些都是异步发生的,因此您需要创建组件可以订阅的Observable。然后在您的回调中,您可以nextcomplete观察。

类似的东西:

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数据