У меня есть следующий редуктор:

export const changeListener = () => (dispatch) => {
  changeListenerManager.update((res) => {
    changeListener();
    dispatch({ type: 'CHANGE', payload: res });
  });
};

Которая должна вызывать функцию changeListener(); сразу после того, как она была вызвана. Однако, когда ответ возвращается от собственного моста (мост получает функцию обратного вызова, сохраняет ее, а когда происходит изменение, он использует ее для уведомления приложения), функция вообще не вызывается - и ошибки нет. Если я пытаюсь вызвать метод из обратного вызова (в отладчике), я получаю информацию, что он не определен. Как я могу решить эту проблему?

0
uksz 14 Мар 2018 в 10:10

2 ответа

Лучший ответ

changeListener - это каррированная функция, поэтому вам нужно передать второй необходимый аргумент, dispatch.

Примере:

changeListener()(dispatch);

Примечание : текущая логика кажется бесконечной.

2
Ioan 14 Мар 2018 в 07:16

Когда вы вызываете changeListener в "теле" вашей функции, вам нужно вызвать ее дважды. Один раз без отправки, один раз с:

export const changeListener = () => (dispatch) => {
  changeListenerManager.update((res) => {
    changeListener()(dispatch);  // <--- CHANGE
    dispatch({ type: 'CHANGE', payload: res });
  });
};

Вы используете функции более высокого порядка.

0
Mr. Baudin 14 Мар 2018 в 07:16