Использование async / await с сервисным работником - PullRequest
4 голосов
/ 07 января 2020

Я довольно плохо знаком с работниками сферы обслуживания, и почти во всех прочитанных мной уроках / статьях используется .then(), поскольку работник службы часто выполняет обещания, но я не видел ни одного учебника, использующего async / await при работе с работниками службы. Есть ли причина, почему? учебные пособия старые или мне просто не следует использовать async / await с работниками сферы обслуживания?

Пример:

if ('serviceWorker' in navigator) {
  window.addEventListener('load', function() {
    navigator.serviceWorker.register('/sw.js').then(function(registration) {
      // Registration was successful
      console.log('ServiceWorker registration successful with scope: ', registration.scope);
    }, function(err) {
      // registration failed :(
      console.log('ServiceWorker registration failed: ', err);
    });
  });
}

Возможно, было выполнено использование async / await?

Источники, которые я посмотрел на это использование .then()

https://developers.google.com/web/fundamentals/primers/service-workers/registration

https://developers.google.com/web/fundamentals/primers/service-workers

https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle

https://developers.google.com/web/fundamentals/codelabs/offline

1 Ответ

5 голосов
/ 07 января 2020

Обещания с then / catch могут использоваться взаимозаменяемо с async / await. Если вы wi sh, вы можете заменить then на awaits, а ошибки на catch ...

// inside an async function
// assuming that register() is a promise-returning function...
try {
  let registration = await navigator.serviceWorker.register('/sw.js')
  console.log('ServiceWorker registration successful with scope: ', registration.scope);
} catch(err) {
  console.log('ServiceWorker registration failed: ', err);
}
...