Выполнение кода останавливается после внутренней ошибки сервера ax ios 500 - PullRequest
1 голос
/ 22 февраля 2020

Я использую axios с trycatch, но когда API возвращает 500 внутреннюю ошибку сервера, выполнение кода перехватывает, но вне кода функции async не выполняется, я не знаю почему.

Вот мой код:

export async function authRequest(router, path='/', data={}, method='get') {

  const authKey = getAuthKey();

  try {
    const request = await axios({
      method,
      url: apiUrl + path,
      headers: {
        'Authorization': "Bearer " + authKey
      },
      data
    });

    return request.data;
  } catch (error) {

    const isLogged = await axios({
      method: 'get',
      url: apiUrl + '/isLoggedUser',
      headers: {
        'Authorization': "Bearer " + authKey
      }
    });

    if (isLogged.data == false) {
      router.push({
        name: 'login'
      })
    } else {
      console.error('Cannot process this request');
      return false;
    }
  }
}

Вызов этой функции:

const req = await authRequest(
    this.$router,
    '/video/play',
  );

console.log('cannot reach to this statment after 500 error in axios request')

Поскольку последний оператор console.log не выполняется / не достигает или любой код после когда Axios выдает внутреннюю ошибку сервера 500.

Обратите внимание: проблема связана с внутренним сервером ax ios 500, который останавливает дальнейшее выполнение кода вне функции authRequest.

1 Ответ

0 голосов
/ 22 февраля 2020

Запрос Axe ios, который вы делаете в блоке catch, должен быть окружен try / catch. Любой ответ, отличный от 2XX, будет go перехватывать блок (выдает ошибку).

Подробнее об этом

export async function authRequest(router, path = '/', data = {}, method = 'get') {

  const authKey = getAuthKey();

  try {
    const request = await axios({
      method,
      url: apiUrl + path,
      headers: {
        'Authorization': "Bearer " + authKey
      },
      data
    });

    return request.data;
  } catch (error) {

    try {
      const isLogged = await axios({
        method: 'get',
        url: apiUrl + '/isLoggedUser',
        headers: {
          'Authorization': "Bearer " + authKey
        }
      });

      if (isLogged.data == false) {
        router.push({
          name: 'login'
        })
      }
    } catch (e) {
      console.error('Cannot process this request');
      return false;
    }
  }
}

Можете ли вы попробовать использовать try / catch при вызове authRequest.

try{

    const req = await authRequest(
    this.$router,
    '/video/play',
  );
  console.log('cannot reach to this statment after 500 error in axios request')
}
catch(e){
    console.log('cannot reach to this statment after 500 error in axios request')
}
...