【问题标题】:Why my redux-saga is async为什么我的 redux-saga 是异步的
【发布时间】:2016-10-06 20:26:15
【问题描述】:

在我的 React-Native 应用程序中,我编写了一个用户登录组件,它将用户名和哈希发送到服务器,将哈希与数据库中的哈希进行比较并返回结果。我实现了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 会返回正确的响应。

我找不到我的错误在哪里。为什么Api.fetchUser返回正确响应后const user = yield call(Api.fetchUser, action)的结果是undefined?

fetchUser(action) {
    const url = `${apiUrls.LOGIN_URL}`;

    fetch(url, 'POST', action.user)
      .then(response => response.json())
      .then(res => res)
  }

【问题讨论】:

    标签: reactjs react-native redux redux-saga


    【解决方案1】:

    您没有从 fetchUser 函数返回承诺。应该是

    fetchUser(action) {
        const url = `${apiUrls.LOGIN_URL}`;
    
        return fetch(url, 'POST', action.user)
          .then(response => response.json())
          .then(res => res)
      }
    

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 2019-12-09
    • 2017-02-22
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2019-01-18
    • 2020-01-27
    相关资源
    最近更新 更多