Workbox - что вернуть при использовании setCatchHandler?

В документации Workbox (v5) пример отправит обратно объект Response.error():

setCatchHandler(() => {
    return Response.error();
});

Однако нам необходимо поддерживать некоторые мобильные устройства, на которых нет Response API - что мне использовать вместо этого?


person JoeTidee    schedule 02.07.2020    source источник


Ответы (1)


Независимо от того, что Response возвращается из handlerCallback затем отправляется как есть в основной поток.

Ответ на любой ответ, обработанный вашим существующим кодом как ошибка, должен работать.

Вот что генерирует Response.error():

Response {
  body: null
  bodyUsed: false
  headers: Headers {}
  ok: false
  redirected: false
  status: 0
  statusText: ""
  type: "error"
  url: ""
}

И вот что генерирует new Response(null, {status: 500}):

Response {
  body: null
  bodyUsed: false
  headers: Headers {}
  ok: false
  redirected: false
  status: 500
  statusText: ""
  type: "default"
  url: ""
}

Единственные различия - status (0 -> 500) и type ('error' -> 'default'). Те же минимальные различия применимы к new Response(null, {status: 404}). Также обратите внимание, что если вы используете Fetch API, ответ со статусом ошибки не разрешается в отклоненном обещании, что требует дополнительной проверки свойства Response ok.

Я проверил через Могу ли я использовать доступность различных API ответов для различных платформ, но я обнаружил, что они неточны. Вы можете выполнить онлайн-тест здесь и здесь. error(), ok и status Response доступны во всех последних браузерах для настольных и мобильных устройств.

Другой вариант - использовать полифил, как этот, который перезаписывает глобальный объект Response на объект, содержащий error() реализацию , но я не уверен в этой альтернативе.

person mishamosher    schedule 05.07.2020