#reactjs #react-native #redux #redux-saga
#reactjs #react-native #redux #redux-saga
Вопрос:
В моем приложении для реагирования я пишу компонент входа пользователя в систему, который отправляет имя пользователя и хэш на сервер, сравнивает хэш с хэшем в базе данных и возвращает результат. Я реализовал это using redux-saga
:
function* fetchUser(action) {
try {
const user = yield call(Api.fetchUser, action);
yield put({type: types.USER_FETCH_SUCCEEDED, user});
} catch (e) {
yield put({type: types.USER_FETCH_FAILED, message: e.message});
}
}
export function* watchFetchUser() {
yield* takeEvery(types.USER_FETCH_REQUESTED, fetchUser);
}
export default function* rootSaga() {
yield fork(watchFetchUser);
// ...
}
И я ожидаю, что const user
это будет содержать ответ от API и после запуска yield put({type: types.USER_FETCH_SUCCEEDED, user})
. Но после yield call(Api.fetchUser, action)
user
есть undefined
. Но Api.fetchUser
возвращает правильный ответ.
И я не могу найти, где моя ошибка. Почему результат const user = yield call(Api.fetchUser, action)
— это undefined
когда после Api.fetchUser
возврата правильный ответ?
fetchUser(action) {
const url = `${apiUrls.LOGIN_URL}`;
fetch(url, 'POST', action.user)
.then(response => response.json())
.then(res => res)
}
Ответ №1:
Вы не возвращаете обещание из функции fetchUser. Это должно быть
fetchUser(action) {
const url = `${apiUrls.LOGIN_URL}`;
return fetch(url, 'POST', action.user)
.then(response => response.json())
.then(res => res)
}
Комментарии:
1. Большое вам спасибо!