如何有效处理API错误?

时间:2018-12-20 06:33:53

标签: javascript reactjs react-native axios redux-saga

一切顺利时,它会返回带有status: 'OK'的对象 如果出现问题,它将返回status: 'FAILED', 由于这种方法,我需要在try和catch块中都处理错误,例如

try {
  const {data} = await axios.post(....);

  if(data.status === 'OK') {
    // do something and return 
  }

  //handle error
} catch(e) {
  // handle Error Again
}

如您所见,我需要两次处理错误。我正在使用redux-saga,因此我为API创建了另一个文件,并像这样在saga中对其进行处理:

yield = ...my api

// then 

if (data.status === 'OK') {
  // do something and return 
} 

以此类推...我的最终目标是保持萨加斯整洁。有什么方法可以调用API,然后检查API文件中的状态?它应该进入传奇的catch块,这样我就只需要处理catch块中的错误?

我的最终目标将是这样

function* doSomethng() {
  try {
    yield callapi...
    //do something
  } catch(e) {
    // handle errors and even if the api status is 200
    // but it returns an object with status 'FAILED' it should come here
  }
}

1 个答案:

答案 0 :(得分:0)

您可以创建一个包装器函数,该函数将在Promise链中添加检查并抛出不良状态。

const checkStatus = async (promise) => {
    const result = await promise;
    if (!result || result.status === 'FAILED') throw new Error('Request failed');
    return result;
}

function* doSomething() {
    try {
        yield checkStatus(callapi(...));
        //do something
    } catch(e) {
        // ...
    }
}

您还可以在callapi函数本身中“隐藏” checkStatus调用。