const url = "https://i.imgur.com/sduLRvf.jpeg";
const resp = await fetch(url);
const blob = await resp.blob();
const name = url.split("/").pop().replace("jpeg", "jpg");
downloadBlob(blob, name, url);
function downloadBlob(blob, name, url) {
const anchor = document.createElement("a");
anchor.setAttribute("download", name || "");
const blobUrl = URL.createObjectURL(blob);
anchor.href = blobUrl + (url ? ("#" + url) : "");
anchor.click();
setTimeout(() => URL.revokeObjectURL(blobUrl), 3000);
}url параметр опциональный, чисто чтобы сохранить возможность посмотреть оригинальный URL в менеджере загрузок. <template>
<div>App: {{numRef}}</div>
<hr>
<Minus :state="state"/>
</template>
<script setup>
import {ref, watchEffect} from "vue";
import Minus from "./Minus.vue";
const numRef = ref(0);
const state = {numRef};
watchEffect(() => {
console.log(numRef.value);
});
</script><template>
<div>{{state.numRef}} - <button @click="onClick">Minus</button></div>
<Plus :state="state"/>
</template>
<script setup>
import Plus from "./Plus.vue";
const props = defineProps(["state"]);
function onClick() {
props.state.numRef.value--;
}
</script><template>
<div>{{state.numRef}} - <button @click="onClick">Plus</button></div>
</template>
<script setup>
const props = defineProps(["state"]);
function onClick() {
props.state.numRef.value++;
}
</script>.github/workflows/blank.yml.console.log((Buffer.from(hex, "hex").toString("utf-8")));5MA0C��@�Q[...new TextEncoder().encode("5MA0C��@�Q")].map(n => n.toString(16)).join("")
===
"354d413043efbfbdefbfbd40efbfbd51"
// true function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}for (let i = 0; i < 10; i++) {
console.log(i);
await sleep(100);
}
await sleep(1000);
console.log("Done");"Done". v-model это не то, что по-умолчанию есть во все компонентах. Это как раз наоборот.v-model, то скорее всего об это будет явно сказано в доках.TransformStream. ReadableStream. Единственное отличие, что TransformStream "ленивый". Т.е. если закомментировать await newResponse.blob(); onProgress не будет вызываться, хотя данные были загружены.const response = await fetch("https://fetch-progress.anthum.com/30kbps/images/sunrise-baseline.jpg");
total.value = parseInt(response.headers.get("content-length")) || 0;
function onProgress(chunk) {
loaded.value += chunk.length;
}
const ts = new TransformStream({
transform(chunk, controller) {
onProgress(chunk);
controller.enqueue(chunk);
},
});
response.body.pipeThrough(ts);
const newResponse = new Response(ts.readable);
const blob = await newResponse.blob();"content-length" может отсутствовать. "content-encoding", который, к слову, по-умолчанию будет недоступен для кода при кросс-доменных запросах."content-encoding" в "content-length" значение всегда указано для сжатого респонса, а в коллбеке будут уже не сжатые данные. Т.е. loaded в таком случае будет больше значения total ("content-length")ReadableStream:const reader = response.body.getReader();
const readableStream = new ReadableStream({
async start(controller) {
while (true) {
const {done, value} = await reader.read();
if (done) { break; }
onProgress(value);
controller.enqueue(value);
}
controller.close();
reader.releaseLock();
},
cancel() {
void reader.cancel();
}
});
const newResponse = new Response(readableStream); function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}const btns = [...document.querySelectorAll("button")];
const filteredBtns = btns.filter(btn => btn.textContent.startsWith("Кнопка"));
for (const btn of filteredBtns) {
btn.click();
await sleep(5000);
} {name: 'Ivan'}
new Uint8Array(100_000_000). Весомый.let weakMap = new WeakMap();
let obj = {a: new Uint8Array(100_000_000)};
weakMap.set({}, obj);WeakMap Map.new Uint8Array(1_000_000_000).let weakMap = new Map(); не поможет при таком спаме в консоль, т.к. если объект выведен в косколь, он так и будет висеть в памяти, пока консоль не будет очищена (console.clear()), либо страница перезагружена.
WeakHashMap. node_modules, package-lock.json и package.json обратно из папки data. onerror у img элемента.<img src="not-loading-image.jpg" onerror="this.remove();">
<img src="https://hsto.org/webt/62/a8/df/62a8df7d29053796257182.png" onload="console.log(this);"> Кто поможет?
async asyncMethod() {
// следующее добавит в очередь микро-тасков:
await null; // или
await Promise.resolve();
// а это добавит в очередь тасков:
await new Promise(resolve => setTimeout(resolve));
// лучше используй setImmediate, он многократно быстрее отработает (без задержки в 4 мс)
console.log("hello from asyncMethod");
}async) функции или коллбека конструтора Promise выполняется синхронно до первого await.await, не используй async.export default {
data() {
return {
dateNow: new Date(),
timerId: null
};
},
mounted() {
this.timerId = setInterval(() => {
this.dateNow = new Date();
}, 1000);
},
beforeUnmount() {
clearInterval(this.timerId);
}
};import {ref, onUnmounted} from "vue";
const dateNow = ref(new Date());
const timerId = setInterval(() => {
dateNow.value = new Date();
}, 1000);
onUnmounted(() => {
clearInterval(timerId);
}); // element-util.js
export function createElement(options) {
// код функции
}
export function showElement(options) {
// код функции
}
export function hideElement(options) {
// код функции
}import {createElement} from "./element-util.js";
function Component() {
const heading = createElement({
id: "heading",
content: "Hello World",
});
const message = createElement({
id: "message",
content: "New Article",
});
return {heading, message};
}