【问题标题】:Get Data from api in redux-saga reactJS从 redux-saga reactJS 中的 api 获取数据
【发布时间】:2020-07-31 16:54:31
【问题描述】:

我正在尝试从我的 redux-saga 中的 API 获取数据,但我在我的 redux-saga 中从const {body: {data}} =yield getData() 收到以下错误:

cannot read property body of udefined

这是我的 API 函数:

    export function* getData() {
    yield agent
        .get(
            "https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?CMC_PRO_API_KEY=xxx"
        )
        .then((res) => {
            getCurrencies(res.body.data);
            console.log('--------res.body.data', res.body.data);
            setPageCount();
        })
        .catch((err) => {
            console.log(err);
        });
}

.then是返回数据本身,所以不是未定义的

这是我的 redux-saga 本身:

    function* loadDataAsync() {
  console.log("SAGAS WORKS");
    yield delay(5000);
  try {
    const {body: {data}} =yield getData()
    console.log(data)
    yield put({type:"LOAD_DATA_ASYNC_SUCCESS"});
  } catch (err) {
    console.log(err)
    yield put({type:"LOAD_DATA_ASYNC_ERROR"})
  }
}

export function* watchLoadDataAsync() {
  yield takeLatest("LOAD_DATA_ASYNC", loadDataAsync);
}

请问有什么解决办法吗?

【问题讨论】:

  • “但我收到以下错误:无法定义未定义的数据” - 在哪里?错误点的堆栈跟踪是什么?那时变量的值是多少?
  • 我得到的错误来自这里const {body: {data}} =yield getData()
  • yield getData() 的结果是什么? .then(...) 没有返回任何东西,所以可能是未定义的?
  • .then 返回我检查过的数据本身,它不是未定义的
  • 尝试删除 .then.catch for getData api 调用并将其更改为 yield call(...)

标签: reactjs redux redux-saga


【解决方案1】:

您需要使用call 从您的异步操作

中获取数据
function* loadDataAsync() {
  console.log("SAGAS WORKS");
    yield delay(5000);
  try {
    const {body: {}} = yield call(agent.get, "https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?CMC_PRO_API_KEY=xxx");
    console.log(body.data);
    // Call your other functions here
    getCurrencies(body.data);
    setPageCount();

    yield put({type:"LOAD_DATA_ASYNC_SUCCESS"});
  } catch (err) {
    console.log(err)
    yield put({type:"LOAD_DATA_ASYNC_ERROR"})
  }
}

有关更多信息,请查看call 的官方文档

【讨论】:

  • 谢谢您的回答。但是您的代码中的问题是我无法访问data
  • Line 14:19: 'data' is not defined no-undef
  • 我猜是body.data。我的错。更新了我的答案?
猜你喜欢
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多