Как эффективно обрабатывать ошибки API? - PullRequest
0 голосов
/ 20 декабря 2018

Когда все идет хорошо, он возвращает объект с 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 и обрабатываю его в саге так:

yield = ...my api

// then 

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

и так далее ... Моя конечная цель - сохранить мои саги чистыми.Есть ли способ, которым я могу вызвать API, а затем проверить статус в файле API?Он должен идти к блоку перехвата саги, чтобы мне приходилось обрабатывать только ошибки в моем блоке перехвата?

Моя конечная цель будет такой:

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 голосов
/ 20 декабря 2018

Вы можете создать функцию-обертку, которая добавит проверку в цепочку обещаний и выдаст плохой статус.

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) {
        // ...
    }
}

Вы также можете "спрятать" вызов checkStatus в самой функции callapi.

...