Выборка проекта с использованием механизма кэширования с использованием SessionStorage: почему он преобразовывает кэшированный результат в BLOB-объекты при создании нового ответа - PullRequest
0 голосов
/ 14 апреля 2020

https://www.sitepoint.com/cache-fetched-ajax-requests/

Я читаю эту статью о создании выборки с использованием SessionStorage в качестве кэша. Когда URL-адрес идентичен, мы читаем из SessionStorage, чтобы выполнить запрос.

const cachedFetch = (url, options) => {
  // Use the URL as the cache key to sessionStorage
  let cacheKey = url

  // START new cache HIT code
  let cached = sessionStorage.getItem(cacheKey)
  if (cached !== null) {
    // it was in sessionStorage! Yay!
    let response = new Response(new Blob([cached]))
    return Promise.resolve(response)
  }
  // END new cache HIT code

  return fetch(url, options).then(response => {
    // let's only store in cache if the content-type is
    // JSON or something non-binary
    if (response.status === 200) {
      let ct = response.headers.get('Content-Type')
      if (ct && (ct.match(/application\/json/i) || ct.match(/text\//i))) {
        // There is a .json() instead of .text() but
        // we're going to store it in sessionStorage as
        // string anyway
       // If we don't clone the response, it will be
        // consumed by the time it's returned. This
        // way we're being un-intrusive.
        response.clone().text().then(content => {
          sessionStorage.setItem(cacheKey, content)
        })
      }
    }
    return response
  })
}

Что я не понимаю, так это зачем нам нужно делать это, чтобы сделать новый ответ?

    let response = new Response(new Blob([cached]))

Я понимаю, что sessionStorage хранит только текст, и я помню blob больше относится к двоичным данным, таким как images / videos / aud ios. Так почему же нам нужно сначала преобразовать текст в BLOB-объект, чтобы создать новый объект Response.

Я также задал связанный вопрос перед Каким должен быть вызван промежуточный результат, возвращаемый запросом на выборку? BLOB-объект или просто ответ? Существенным является вопрос о том, является ли объект ответа также blob, и ответ, по-видимому, не

...