RxJS:Observable.webSocket() 获取 onopen、onclose …
RxJS: Observable.webSocket() get access to onopen, onclose…
const ws = Observable.webSocket('ws://…');
ws.subscribe(
message => console.log(message),
error => console.log(error),
() => {},
);
我想观察我的 WebSocket 与 RxJS 的连接。通过订阅可观察的作品来对 onmessage
事件做出反应,就像一个魅力。但是如何访问 WebSocket 的 onopen
事件呢?是否可以触发 WebSocket .close()
方法? RxJS 对我来说很新,我研究了几个小时,但也许我只是不知道正确的术语。提前致谢。
查看 sourcecode of the Websocket 有一个配置对象 WebSocketSubjectConfig
,其中包含您可以 link 不同事件的可观察对象。您应该能够将 NextObserver
类型的对象传递给配置值 openObserver
,如下所示:
const openEvents = new Subject<Event>();
const ws = Observable.webSocket({
url: 'ws://…',
openObserver: openEvents
});
openEvents
.do(evt => console.log('got open event: ' + evt))
.merge(ws.do(msg => console.log('got message: ' + msg))
.subscribe();
@Mark van Straten 的 link 文件已死。更新后的 link 为 here。我还想强调文档中建议的用法。我认为更好的复制和粘贴解决方案:
import { webSocket } from "rxjs/webSocket";
webSocket({
url: "wss://echo.websocket.org",
openObserver: {
next: () => {
console.log("connection ok");
},
},
closeObserver: {
next(closeEvent) {
// ...
}
},
}).subscribe();
const ws = Observable.webSocket('ws://…');
ws.subscribe(
message => console.log(message),
error => console.log(error),
() => {},
);
我想观察我的 WebSocket 与 RxJS 的连接。通过订阅可观察的作品来对 onmessage
事件做出反应,就像一个魅力。但是如何访问 WebSocket 的 onopen
事件呢?是否可以触发 WebSocket .close()
方法? RxJS 对我来说很新,我研究了几个小时,但也许我只是不知道正确的术语。提前致谢。
查看 sourcecode of the Websocket 有一个配置对象 WebSocketSubjectConfig
,其中包含您可以 link 不同事件的可观察对象。您应该能够将 NextObserver
类型的对象传递给配置值 openObserver
,如下所示:
const openEvents = new Subject<Event>();
const ws = Observable.webSocket({
url: 'ws://…',
openObserver: openEvents
});
openEvents
.do(evt => console.log('got open event: ' + evt))
.merge(ws.do(msg => console.log('got message: ' + msg))
.subscribe();
@Mark van Straten 的 link 文件已死。更新后的 link 为 here。我还想强调文档中建议的用法。我认为更好的复制和粘贴解决方案:
import { webSocket } from "rxjs/webSocket";
webSocket({
url: "wss://echo.websocket.org",
openObserver: {
next: () => {
console.log("connection ok");
},
},
closeObserver: {
next(closeEvent) {
// ...
}
},
}).subscribe();