Redux-Saga产生的回调未定义

时间:2018-02-05 06:44:29

标签: javascript reactjs redux-saga saga

鉴于以下代码,我从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),
  ]);
}

1 个答案:

答案 0 :(得分:0)

是的,确实如此。 call将返回已解决的承诺值。我最好的猜测是checkStatus没有返回值(你没有显示它)。