Spec-Zone.ru › Web APIs

Ответ: метод clone()

Базовая поддержка Широко доступен

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с марта 2017 года.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Примечание: Эта функция доступна в Web Workers.

Метод clone() интерфейса Response создаёт клон объекта ответа, идентичный во всех отношениях, но хранящийся в другой переменной.

Как и в базовом API ReadableStream.tee, body клонированного объекта Response будет сигнализировать о недостатке ресурсов (backpressure) со скоростью более быстрого потребителя из двух, и необработанные данные будут помещены в очередь в более медленный потребительский body без ограничений или backpressure. Backpressure — это механизм, с помощью которого потребитель потоковых данных (в данном случае код, считывающий тело) замедляет производителя данных (например, TCP-сервер), чтобы не загружать в память большие объёмы данных, ожидающие использования приложением. Если потребляется только одна ветвь клона, то всё тело будет буферизовано в памяти. Поэтому clone() — это один из способов дважды прочитать ответ последовательно, но не следует использовать его для одновременного чтения очень больших тел с разными скоростями.

clone() вызывает исключение TypeError, если тело ответа уже использовано. Фактически, основная причина существования clone() — позволить несколько использований объектов тела (когда они являются одноразовыми).

Синтаксис

clone()

Параметры

Нет.

Возвращаемое значение

Объект Response.

Примеры

В нашем примере клонирования ответа Fetch (см. живой пример клона ответа Fetch) мы создаём новый объект Request с помощью конструктора Request(), передав ему путь к JPG-файлу. Затем мы получаем этот запрос с помощью fetch(). После успешного выполнения fetch мы клонируем его, извлекаем BLOB из обоих ответов с помощью двух вызовов Response.blob, создаём URL-объекты из BLOB с помощью URL.createObjectURL() и отображаем их в двух отдельных элементах <img>.

const image1 = document.querySelector(".img1");
const image2 = document.querySelector(".img2");

const myRequest = new Request("flowers.jpg");

fetch(myRequest).then((response) => {
  const response2 = response.clone();

  response.blob().then((myBlob) => {
    const objectURL = URL.createObjectURL(myBlob);
    image1.src = objectURL;
  });

  response2.blob().then((myBlob) => {
    const objectURL = URL.createObjectURL(myBlob);
    image2.src = objectURL;
  });
});

Спецификации

Спецификация
Fetch
# ref-for-dom-response-clone①

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
clone 40 14 39 27 10.1 40 39 27 10.3 4.0 40

См. также

  • API ServiceWorker
  • Контроль доступа через HTTP (CORS)
  • HTTP

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Response/clone

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API