метод debounce внутри Redux Thunk - PullRequest
0 голосов
/ 23 мая 2018

У меня есть действие с асинхронным методом внутри, и я хочу отменить его

export const onSearchChange = query => dispach => {
    if (query === "") {
        dispach({ type: SOME_TYPE, payload: query })
    } else {
        dispach({ type: SOME_TYPE, payload: query })
        searchProductsCall(query).then(payload => {
            dispach({ type: SOME_OTHER_TYPE, payload })
        })
    }
}

как я могу отменить searchProductsCall, используя lodash или что-то еще?

1 Ответ

0 голосов
/ 23 мая 2018

Сначала вам нужно создать отклоненную функцию и вызывать эту функцию вместо searchProductsCall.

Следующий код должен убедиться, что первая отправка вызывается сразу во всех случаях (возможно, это изменяет интерфейс пользователя)?) и что он вызывает searchProductsCall только после отладки и при наличии непустого запроса.

export const debouncedSearchProductsCall = _.debounce((query, dispatch) => {
    if (query !== "") {
        searchProductsCall(query).then(payload => {
            dispatch({ type: SOME_OTHER_TYPE, payload })
        });
    }
}, 200);

export const onSearchChange = query => dispatch => {
    dispatch({ type: SOME_TYPE, payload: query });
    debouncedSearchProductsCall(query, dispatch);
}
...