const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
const chunksToSend = ['1', '2', '3'];
const stream = new ReadableStream({
async start(controller) {
for(const chunk of chunksToSend) {
await delay(1000);
controller.enqueue(chunk);
}
controller.close();
}
});
fetch('https://postman-echo.com/post', {
method: 'POST',
body: stream.pipeThrough(new TextEncoderStream()),
headers: {'Content-Type': 'text/plain'},
duplex: 'half',
})
.then(response => response.text())
.then(text => console.log('Response:', text));
Uint8Array
, потому тут используется .pipeThrough(new TextEncoderStream())
который собственно и делает этот массив из строки, но ты можешь в ручную чанки из Uint8Array
слать, если у тебя не строковые данные.Первый раз сталкиваюсь с такой проблемой.
const articleDB = new DB(json);
console.log(articleDB.get(1));
articleDB.delete(1);
for(const article of articleDB.byTagIterator('oracle')) {
console.log(article)
}
saveToFile(articleDB.toJSON());
Object.keys({2:0, 3:0, 1:0}) // ['1', '2', '3']
, возможно этот факт тебе чем-то поможет. ну вот нихрена не так.а ты руками замерь. Хз что у них там на самом деле значат ops/sec.
unshift
- неоптимально. А вот добавить один элемент в уже имеющийся массив от push
неотличимо.хотя вид классов не интуитивно понятный этому не способствует
class DB {
constructor(json) {
// начальная подготовка структуры
}
toJSON() {
// экспорт структуры для сохранения
}
reversed() {}
reversedIterator() {}
byTag(tag) {}
byTagIterator(tag) {}
add(record) {}
get(id) {}
delete(id) {}
}
По сути же код просто берёт градиент и анимирует его слева направо. Просто обычный градиент. Он никаким образом не стелится вдоль линии и не учитывает её форму. Представить, что ты берёшь листок бумаги, врезаешь в нём дырку в виде этой своей изогнутой линии и под эти листком двигаешь слева-направо картинку градиента. Примерно так оно тут и выглядит.