到目前为止,我仍无法弄清楚为什么我没有使用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
答案 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;
}