我目前正在开发一款小型应用程序,它基本上可以复制whatsapp的功能,可以进行简单的聊天。
为此,我使用了websockets,我偶然发现了几个教程和stackoverflow帖子,这些帖子使用了websocket的这种代码,然后我将其用于我的项目。
private create(url) {
const websocket = new WebSocket(url);
const observable: Observable<MessageEvent> = Observable.create(
(observerInLambda: Observer<MessageEvent>) => {
websocket.onmessage = observerInLambda.next.bind(observerInLambda);
websocket.onerror = observerInLambda.error.bind(observerInLambda);
websocket.onclose = observerInLambda.complete.bind(observerInLambda);
return websocket.close.bind(websocket); // When unsubbing from the observable the websocket is closed
}
);
const observer = {
next: (data: Object) => {
if (websocket.readyState === WebSocket.OPEN) {
websocket.send(JSON.stringify(data));
}
},
error: (err: any) => {
console.log(err);
},
complete: () => {
console.log("complete");
}
};
return Subject.create(observer, observable);
}
&#13;
这个工作大部分都很好,从取消订阅时断开连接,但这不是我的问题。我知道我必须使用某种回调/事件样式代码,如websocket.onmessage = (data:Object) => doStuff(data);
来读取websocket,但令我困惑的是为什么我必须使用一个观察者,我调用了.next
函数,然后调用websocket.send
。为什么不简单地调用websocket.send
,而不是异步函数......
对我来说,似乎整个模式包括主题对我正在做的事情有点矫枉过正?我得错了什么,或者在我的情况下根本没用?