You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
let chunks = []; // массив полученных двоичных отрезков (в нём будет тело ответа)
51
+
let chunks = []; // массив полученных двоичных фрагментов (в нём будет тело ответа)
52
52
while(true) {
53
53
const {done, value} =awaitreader.read();
54
54
@@ -62,7 +62,7 @@ while(true) {
62
62
console.log(`Получено ${receivedLength} из ${contentLength}`)
63
63
}
64
64
65
-
// Шаг 4: соединим отрезки в общий типизированный массив Uint8Array
65
+
// Шаг 4: соединим фрагменты в общий типизированный массив Uint8Array
66
66
let chunksAll =newUint8Array(receivedLength); // (4.1)
67
67
let position =0;
68
68
for(let chunk of chunks) {
@@ -89,9 +89,9 @@ alert(commits[0].author.login);
89
89
3. Вызываем `await reader.read()` до окончания загрузки.
90
90
91
91
Всё, что получили, мы складываем по "кусочкам" в массив. Это важно, потому что после того, как ответ получен, мы уже не сможем "перечитать" его, используя `response.json()` или любой другой способ (попробуйте - будет ошибка).
92
-
4. В самом конце у нас типизированный массив, состоящий из отрезков -- `Uint8Array`. Нам нужно как-то их склеить, чтобы получить строку. К сожалению, для этого нет единого способа, поэтому можно сделать, например, так:
92
+
4. В самом конце у нас типизированный массив-- `Uint8Array`. В нем каждый фрагмент данных уже превратился в 8-битные целые беззнаковые значения. Нам нужно как-то их склеить, чтобы получить строку. К сожалению, для этого нет единого способа, поэтому можно сделать, например, так:
93
93
1. Создаём `new Uint8Array(receivedLength)` -- массив того же типа заданной длины.
94
-
2. Используем `.set(chunk, position)` метод для копирования каждого отрезка друг за другом в массив рузельтатов.
94
+
2. Используем `.set(chunk, position)` метод для копирования каждого фрагмента друг за другом в массив результатов.
95
95
5. Наш результат теперь хранится в `chunksAll`. Это не строка, а байтовый массив.
96
96
97
97
Чтобы получить именно строку, надо декодировать байты. Встроенный метод [TextDecoder](info:text-decoder) как раз этим и занимается. Потом мы можем распарсить её с помощью `JSON.parse`.
0 commit comments