使用箭头函数将对象绑定到回调中

时间:2016-10-08 17:47:56

标签: javascript ecmascript-6

我是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;
  }
});

2 个答案:

答案 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或块中。