- 問題:Ant Design Pro,請求接口,Network的Preview有值,但返回的response值是undefined,Preview是字符串不是json
// models/login.js中
effects: {
*getData({ payload }, { call }) {
const response = yield call(getData);
console.log(_data); // undefined
return response;
}
}
// 組件中
getData= async() {
const response = await this.props.dispatch({
type: 'login/getData',
});
console.log(response); // undefined
}
- 分析:由於組件和models中都response都是undefined,那麼想到是request.js中的請求沒問題response的,但是操作response的地方出錯。打開utils/request.js,發現return的fetch方法中默認 return response.json(),而Network的Preview是字符串,處理字符串應該用 return response.text(),此處已經報錯。models中拿到的結果就是undefined。
// 默認request
return fetch(url, newOptions)
.then(checkStatus)
.then(response => cachedSave(response, hashcode))
.then(response => {
if (newOptions.method === 'DELETE' || response.status === 204) {
return response.text();
}
return response.json();
})
- 解決辦法:讓後端將返回的數據格式由字符串改爲json。或者前端修改utils/request.js,讓其return response.text()來處理字符串