почему сервисный работник responseWith () может вернуть объект извлечения вместо реального ответа? - PullRequest
0 голосов
/ 09 октября 2018

Я читал документы MDN и запутался, почему event.respondWith может вернуть объект fetch?Разве инициатор запроса не ожидает ответа вместо извлечения?

addEventListener('fetch', event => {
  // Prevent the default, and handle the request ourselves.
  event.respondWith(async function() {
    // Try to get the response from a cache.
    const cachedResponse = await caches.match(event.request);
    // Return it if we found one.
    if (cachedResponse) return cachedResponse;
    // If we didn't find a match in the cache, use the network.
    return fetch(event.request);
  }());
});

1 Ответ

0 голосов
/ 09 октября 2018

Фактический инициатор запроса не ожидает ответа.Он ожидает обещание, которое превращается в ответ.В MDN-документах точно говорится, что:

Метод responseWith () в FetchEvent предотвращает обработку извлечения по умолчанию в браузере и позволяет вам самим давать обещание для ответа.

Вы не возвращаете объект извлечения здесь, когда вызываете fetch(event.request).Вы вызываете метод fetch, который возвращает обещание, которое преобразуется в ответ.Вы можете вернуть любое обещание, которое разрешается, к ответу здесь, например так:

...