一切顺利时,它会返回带有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
}
}
答案 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调用。