如何检索yield函数调用的值?



我正在做一个去年开始的项目,开发人员没有和我在一起。他们写了这样的代码:

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 });

怎么了?

生成器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 });
}

这是一个简单的打字错误-您忘记从getUserByUsernameService函数中return一些东西!您正在调用makeGetRequest,但没有返回响应。你想要

return makeGetRequest('/user', params, headers);

最新更新