我是javascript和ES6的新手。如何将websocket
对象绑定到我提供给subscribe
的回调中?我正在访问来自" global"的websocket
对象,这对我来说是错误的/错误的。这样的范围。
const URL = 'echo.websocket.org';
const websocket = new WebSocket(`wss://${URL}`);
websocket.onmessage = (event)=>redux.dispatch(ChatActions.receiveMessage(event.data));
redux.subscribe(() => {
const { lastAction } = redux.getState();
switch (lastAction.type) {
case ActionTypes.POST_MESSAGE:
return websocket.send(lastAction.text);
default:
return;
}
});
答案 0 :(得分:1)
您可能希望使用closure:
let webSocket = new WebSocket(url);
let takesWebSocket = socket => {
return () => {
// do stuff with the websocket
};
};
let subscribeCallback = takesWebSocket(webSocket);
redux.subscribe(subscribeCallback);
答案 1 :(得分:1)
我从这样的“全局”范围访问websocket对象,这对我来说是错误/奇怪的。
不,这是正确的解决方案。箭头函数在本地websocket
变量上形成closure。
如果您的websocket
变量是全局的,那么这是一个单独的问题,其解决方案不会影响回调。您可以将整个事物包装在函数,IIFE或块中。