在 redux-saga reactJS 中从 api 获取数据

Get Data from api in redux-saga reactJS

我正在尝试从我的 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返回的是数据本身,所以不是undefined

这是我的 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);
}

有什么解决办法吗?

您需要使用 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

的官方文档