Ответ: метод 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 |
См. также
© 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