JS:捕获网络错误并返回默认响应数据

时间:2018-07-16 18:43:17

标签: javascript error-handling promise

我正在开发一个使用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
    }));

该代码示例有效,但是我不确定这是否是一种好/干净的方法?在服务人员中处理这个问题会更好吗?还是应该使用完全不同的方式来解决问题?

1 个答案:

答案 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

事实上,我觉得这很有趣