MessageEvent 的访问字段

Posted

技术标签:

【中文标题】MessageEvent 的访问字段【英文标题】:Access fields of a MessageEvent 【发布时间】:2018-06-01 13:16:02 【问题描述】:

我有一个 Angular 6 前端应用程序,它通过 Websocket 与我的后端通信。

当我发送登录请求时,我的后端返回一个 JSON 对象

"type":"LoggedIn","value":"email":"1@1.de","id":9,"name":"1"

我现在尝试读取那里的字段,但我没有看到允许我这样做的方法。

到目前为止,我可以使用该功能显示整个后端消息:

  this.socketService.receiveEvents('LoggedIn').subscribe((message: MessageEvent) => 
      console.log('message: ' + message.data);
    );

receiveEvents(完整性原则):

 /**
   * TODO: Implement a paramemter that allows this method to return an Observable
   * TODO: with a filter for relevant events for the calling functions
   * @returns Observable<Object>
   */
  receiveEvents(relevantEvent): Observable<Object> 
    return this._subject.asObservable().pipe(filter((event: Event) => event != null));
  

我如何仅显示字段“类型”或“值”?

我已经尝试使用 for 循环对其进行迭代,但我只收到单个字母。

非常感谢。

【问题讨论】:

控制台日志的输出是什么? "type":"LoggedIn","value":"email":"1@1.de","id":9,"name":"1" 所以如果你这样做了:(&lt;any&gt;message.data).type 会发生什么 【参考方案1】:

这样做:

interface BackendResponse 

  type: string;
  value: string[];


this.socketService.receiveEvents('LoggedIn').subscribe((message: MessageEvent) => 
  const obj: BackendResponse = JSON.parse(message.data);
  console.log(obj.type);
);

这应该会让你走上正确的道路 =)

【讨论】:

以上是关于MessageEvent 的访问字段的主要内容,如果未能解决你的问题,请参考以下文章

Subject<MessageEvent> 类型上不存在专有“地图”

EventBus 这一篇还不够

EventBus 这一篇还不够

EventBus 这一篇还不够

React Jest:从测试中触发“addEventListener”“消息”

Spring Cloud Gateway过滤器精确控制异常返回(实战,控制http返回码和message字段)