0

我正在做一个去年开始的项目,开发人员不在我身边。他们写了这段代码:

import { put, takeLatest, all, call } from 'redux-saga/effects';
import { getUserByUsernameService } from '../../services/userServices';
import 'regenerator-runtime/runtime';

function* fetchUser() {
  const response = yield call(getUserByUsernameService);
  yield put({ type: 'FETCHED_USER', payload: response.data.user });
}

function* actionWatcher() {
  yield takeLatest('FETCHING_USER', fetchUser);
}
export default function* rootSaga() {
  yield all([actionWatcher()]);
}

getUserByUsernameService 的代码:

import {
  makeGetRequest,
  makePostRequest,
  makePutRequest,
  makeDeleteRequest,
} from '../utils/reqUtils';

export const getUserByUsernameService = (params) => {
  let headers = {
    "Access-Control-Allow-Origin": "*"
  };
  makeGetRequest('/user', params, headers);
}

makeGetRequest 的代码:

import axios from 'axios';
export const makeGetRequest = (endpoint, params = {}, headers) => {
  const options = {
    method: 'GET',
    headers: { ...headers },
    params: params,
    url: endpoint,
  };

  return axiosInstance(options)
    .then((resp) => resp.data)
    .catch((e) => {
      console.log(e);
      throw e;
    });
};

在运行时我得到Cannot read property 'data' of undefined对应的代码

yield put({ type: 'FETCHED_USER', payload: response.data.user });

那么有什么问题呢?

4

2 回答 2

0

生成器 yield 返回一个可以使用next方法迭代的对象。

我认为你应该使用response.next().valute.data.user. 我还认为,当您使用生成器时,fetchUser您不应该产生callAPI 方法的结果。

function* fetchUser() {
  const response = call(getUserByUsernameService);
  yield put({ type: 'FETCHED_USER', payload: response.next().value.data.user });
}
于 2021-02-04T13:16:18.053 回答
0

这是一个简单的错字——你忘记了函数中的return某些内容getUserByUsernameService!您正在调用makeGetRequest但未返回响应。你要

return makeGetRequest('/user', params, headers);
于 2021-02-04T19:24:52.980 回答