Я пытаюсь очистить все элементы, хранящиеся в localStorage, в методе Redux Saga. Но это работает не так, как ожидалось.
Теоретически, если я хочу вызвать функцию в Saga, нам нужно написать ее без скобок с ключевым словом call
.
Итак, я попытался написать это с помощью yield call(localStorage.clear);
, но он не удаляет элементы из LocalStorage. Если я добавил brackets ()
или без yeild & call
, он будет работать и очищать элементы в LocalStorage, как и ожидалось.
export function* logoutUserSaga() {
try {
const accessToken = yield call(AuthService.getAccessToken);
yield call(AuthService.logoutUser, accessToken);
yield put(logoutUser.success());
yield call(localStorage.clear); // not working
//yield call(localStorage.clear()); // working
//localStorage.clear(); // working
yield put({ type: RESET_ALL_STATE });
}
catch (error) {
yield put(logoutUser.failure({ errorMessage: error.statusText }));
}
}
export default function* watcherSaga() {
yield takeLatest(authenticateUser.TRIGGER, authenticateUserSaga);
yield takeLatest(logoutUser.TRIGGER, logoutUserSaga);
yield takeLatest(getAccessToken.TRIGGER, getAccessTokenSaga);
}
Хотелось бы узнать, почему не работает функция вызова без скобок ().
Причина в том, что вызываемая функция недействительна и не возвращает никакого значения?
Всегда ли мы должны добавлять скобки, если мы хотим вызвать методы void?