我正在开发一个使用Promise与远程API进行通信的应用程序。这个应用程式必须能够无缝离线运作,所以我需要处理网路错误。由于我可以预先定义一些默认数据,足以使应用程序正常运行。我的方法是捕获错误并返回加载了默认数据的新Promise:
API.js
function getDataFromAPI(id) {
return axios.get(`${BASE_URL}/${id}`)
.then(response => response.data)
.catch((error) => {
// Only return fake data in cases of connection issues
if (error.message == 'Network error') {
const fakeResponse = {myDefaultData: 'default data all over the place'};
// receiving function expects data in promise-form
return Promise.resolve(fakeResponse);
}
});
}
使用API的Action.js
needSomeData = () => {
api.getDataFromAPI().then((response) => {
// Data is processed/used here
}));
该代码示例有效,但是我不确定这是否是一种好/干净的方法?在服务人员中处理这个问题会更好吗?还是应该使用完全不同的方式来解决问题?
答案 0 :(得分:0)
所以您可以多清洗一点。
由于来自.catch
的任何回报,请考虑下一个resolved
承诺的价值。您无需返回Promise.resolve(value)
就可以返回value
function getDataFromAPI(id) {
return axios.get(`${BASE_URL}/${id}`)
.then(response => response.data)
.catch((error) => {
// Only return fake data in cases of connection issues
if (error.message == 'Network error') {
return {
myDefaultData: 'default data all over the place'
};
else {
return 'return something or throw new exception'
}
});
}
所以对于那些想确切了解Promise
算法表现的人
Promises/A+ specification
事实上,我觉得这很有趣