鉴于以下代码,我从undefined
获得了yield call
结果。为什么会这样?我正在考虑我的请求功能。不知道为什么。
在我的saga文件中,此行未定义:
const result = yield call(request, Routes.insightTotals);
我已经确认该请求正在启动并正确返回。可能是我的承诺链导致这个未定义吗?
HTTP请求函数
function request(url, options) {
return fetch(url, options)
.then(parseJSON)
.then(checkStatus);
}
function parseJSON(response) {
if (response.url === 'https://myurl.com') {
// This returns as a GZIP body so need to convert to text then parse as JSON
return response.text()
.then((res) => {
const parsed = JSON.parse(res);
console.log(parsed)
return parsed;
}).catch((err) => {
throw new Error(err);
});
}
return response.json();
}
佐贺文件
export function* getInsightTotalsRequestHandler() {
yield takeEvery(actions.GET_INSIGHT_TOTALS, function* getInsightTotalsRequest() {
try {
const result = yield call(request, Routes.insightTotals);
console.log(result); // THIS IS UNDEFINED
yield put({
type: actions.GET_INSIGHT_TOTALS_RETURN,
value: { result },
});
} catch (error) {
yield put({
type: actions.GET_INSIGHT_TOTALS_RETURN,
value: { error: error.message ? error.message : '' },
});
}
});
}
export default function* mySaga() {
yield all([
fork(other1RequestHandler),
fork(other2RequestHandler),
fork(getInsightTotalsRequestHandler),
]);
}
答案 0 :(得分:0)
是的,确实如此。 call
将返回已解决的承诺值。我最好的猜测是checkStatus
没有返回值(你没有显示它)。