Redux-Saga之后数据数组为空

时间:2019-07-07 15:18:44

标签: redux-saga

到目前为止,我仍无法弄清楚为什么我没有使用redux-saga从获取中获取数据,我不知道为什么在诺言解决后数据数组为空。

这是我的代码:

    function* getListFromApi() {
    const response = fetch(listUrl, {
        method: 'GET',
        headers: {
            Accept: 'application/json',
            'Content-Type': 'application/json',
        },
        body: '',
    });
    console.log(response, 'response')

    const list = yield response.status === 200 ? JSON.parse(response._bodyInit): []    
    console.log(list,'list')   
    return list;
}

       export const Api = {
        getListFromApi
    };

/appointmentsSaga.js

    function* fetchList() {
    try {
        const list = yield Api.getListFromApi();   
        yield put({ type: FETCH_SUCCESS, list: list });     
    } catch (error) {        
        yield put({ type: FETCH_FAIL, error });
    }
}
export function* watchFetchList() {
    yield takeLatest(FETCH_APPOINTMENTS, fetchList);
}

console.log(响应)给出:

    Promise {_40: 0, _65: 0, _55: null, _72: null}
_40: 0
_55: Response
headers: Headers {map: {…}}
ok: true
status: 200
statusText: undefined
type: "default"
url: //listUrl
_bodyBlob: Blob {_data: {…}}
_bodyInit: Blob {_data: {…}}
__proto__: Object
_65: 1
_72: null
__proto__: Object

1 个答案:

答案 0 :(得分:1)

您不是在等任何地方解决承诺,因此该代码会在提取完成之前逐一压缩。在一个传奇中,您可以yield一个诺言,redux传奇将等待该诺言解决,然后恢复您的传奇。

此外,在使用访存api时,您将需要使用.json()(或其他方法之一(如果不处理json数据的话))来访问消息中的数据。这也会返回一个承诺,因此您需要等待。

function* getListFromApi() {
  const response = yield fetch(listUrl, {
    method: 'GET',
    headers: {
      Accept: 'application/json',
      'Content-Type': 'application/json',
    },
    body: '',
  });

  if (!response.ok) {
    throw response.status;
  }

  const data = yield response.json();

  return data;
}