Как перехватить код состояния при сбое извлечения при помощи async await - PullRequest
0 голосов
/ 10 июля 2019

Контекст

Я собираюсь использовать Обещания до Асинхронное / Ожидание для одного из моих запросов (который я использую внутри Vuex action , но это не обязательно для понимания моей проблемы).

Используя приведенный ниже код, я могу предоставить конечному пользователю сообщение об ошибке в зависимости отКод состояния моего ответа на случай, если запрос не удался.

fetch("http://localhost:8000/api/v1/book", {
  headers: {
    Accept: "application/json"
  }
}).then(response => {
  if (!response.ok) {
    if (response.status === 429) {
      // displaying "wow, slow down mate"
    } else if (response.status === 403) {
      // displaying "hm, what about no?"
    } else {
      // displaying "dunno what happened \_(ツ)_/¯"   
    }

    throw new Error(response);
  } else {
    return response.json();
  }
}).then(books => {
  // storing my books in my Vuex store
})
.catch(error => {
  // storing my error onto Sentry
});

Проблема

Использование async/await, вот как мой код выглядит сейчас:

try {
  const response = await fetch("http://localhost:8000/api/v1/book", {
    headers: {
      Accept: "application/json"
    }
  });

  const books = await response.json();

  // storing my books
} catch(exception) {
  // storing my error onto Sentry
}

Вопрос

Как определить, какой код состояния был возвращен в моем ответе в случае сбоя при использовании async/await?

Если я использую это неправильно, просто не стесняйтесь исправить меня с лучшим рисунком.

Примечания

Я сделалJSFiddle, чтобы проверить проблему вживую.Не стесняйтесь обновлять его.

https://jsfiddle.net/180ruamk/

1 Ответ

0 голосов
/ 10 июля 2019

Это будет точно такой же код, как в вашем then обратном вызове:

try {
  const response = await fetch("http://localhost:8000/api/v1/book", {
    headers: {
      Accept: "application/json"
    }
  });
  if (!response.ok) {
    if (response.status === 429) {
      // displaying "wow, slow down mate"
    } else if (response.status === 403) {
      // displaying "hm, what about no?"
    } else {
      // displaying "dunno what happened \_(ツ)_/¯"   
    }
    throw new Error(response);
  }
  const books = await response.json();

  // storing my books
} catch(exception) {
  // storing my error onto Sentry
}
...