Как справиться с ошибкой без сбоя функции с топором ios? - PullRequest
1 голос
/ 02 апреля 2020

Итак, проблема в том, что в какой-то функции я хочу вызвать функцию getRecord. Это делает запрос с топором ios. Иногда запрос может быть неуспешным, поэтому я хочу обработать ошибку без сбоев моей функции, где я звоню getRecord.

Я вызываю getRecord так:

  const res = await getRecord(eventData)
  console.log('handleReadyToRemoveCalls -> res', res)

Вот функция getRecord

const getRecord = ({ extTrackingId, targetId }) => {
  console.log('getRecord -> executed')
  const apiConfig = require('../config')

  return new Promise((resolve, reject) => {
    axios({
      method: 'get',
      url: `https://cloudpbx.beeline.ru/apis/portal/v2/records/${extTrackingId}/${targetId}/download`,
      responseType: 'stream',
      headers: {
        'X-MPBX-API-AUTH-TOKEN': `${apiConfig.token}`,
      },
    })
      .then((response) => {
        console.log('getRecordsReference -> response', response)
        resolve(response)
      })
      .catch((err) => {
        console.log('getRecordsReference -> err', err)
        reject(err)
      })
  })
}

При таком подходе я неожиданно получаю сбои, когда происходит сбой запроса с топором ios. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Окружить с помощью try catch.

try{
  const res = await getRecord(eventData)
}catch(err){
//say dispatch a function and say please try again in UI
}

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

0 голосов
/ 02 апреля 2020

Вы отклоняете обещание в блоке catch:

.catch((err) => {
     reject(err)
})

Таким образом, вы распространяете ошибку. Если вы хотите, чтобы функция не сработала, просто верните что-то, что не является ошибкой, как пустой массив. Например:

.catch((err) => {
     resolve([])
})

Один другой способ , чтобы справиться с этим, состоит в том, чтобы отклонить, как вы делаете, и поймать ошибку выше с помощью перехвата try, подобного этому:

try {
  const res = await getRecord(eventData)
} catch(err){
  // do whatever you want in case of an error
}
...