Baseline Widely available
ÐÑÑажение for await...of
ÑоздаÑÑ Ñикл, пÑоÑ
одÑÑий ÑеÑез аÑинÑ
ÑоннÑе иÑеÑиÑÑемÑе обÑекÑÑ, а Ñакже ÑинÑ
ÑоннÑе иÑеÑиÑÑемÑе ÑÑÑноÑÑи, вклÑÑаÑÑие: вÑÑÑоеннÑе String
, Array
, Array
-подобнÑе обÑекÑÑ (напÑимеÑ., arguments
или NodeList
), TypedArray
, Map
, Set
, а Ñакже опÑеделÑемÑе полÑзоваÑелем аÑинÑ
ÑоннÑе/ÑинÑ
ÑоннÑе ÑÑÑноÑÑи. Ðн вÑзÑÐ²Ð°ÐµÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий иÑеÑаÑионнÑй Ñ
Ñк Ñ Ð¸Ð½ÑÑÑÑкÑиÑми, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ Ð´Ð»Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ оÑделÑного ÑвойÑÑва обÑекÑа.
for await (variable of iterable) { statement }
variable
Ðа каждой иÑеÑаÑии знаÑение дÑÑгого ÑвойÑÑва пÑиÑваиваеÑÑÑ variable. variable Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð±ÑÑвлена Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ»ÑÑевÑÑ
Ñлов const
, let
, or var
.
iterable
ÐбÑекÑ, ÑÑи иÑеÑиÑÑемÑе ÑвойÑÑва бÑдÑÑ Ð¿Ð¾Ð²ÑоÑÑÑÑÑÑ.
ÐÑ Ñакже можеÑе пеÑебÑаÑÑ Ð¾Ð±ÑекÑ, коÑоÑÑй Ñвно ÑеализÑÐµÑ Ð°ÑÐ¸Ð½Ñ ÑоннÑй иÑеÑиÑÑемÑй пÑоÑокол.
var asyncIterable = {
[Symbol.asyncIterator]() {
return {
i: 0,
next() {
if (this.i < 3) {
return Promise.resolve({ value: this.i++, done: false });
}
return Promise.resolve({ done: true });
},
};
},
};
(async function () {
for await (let num of asyncIterable) {
console.log(num);
}
})();
// 0
// 1
// 2
ÐÑеÑиÑование по аÑинÑ
ÑоннÑм генеÑаÑоÑам
ÐоÑколÑÐºÑ Ð°ÑинÑ
ÑоннÑе генеÑаÑоÑÑ ÑеализÑÑÑ Ð°ÑинÑ
ÑоннÑй пÑоÑокол Iterator, по ним можно пÑойÑи Ñиклом Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ for await... of
async function* asyncGenerator() {
var i = 0;
while (i < 3) {
yield i++;
}
}
(async function () {
for await (let num of asyncGenerator()) {
console.log(num);
}
})();
// 0
// 1
// 2
ÐÐ»Ñ Ð±Ð¾Ð»ÐµÐµ конкÑеÑного пÑимеÑа пеÑебоÑа аÑинÑ
Ñонного генеÑаÑоÑа Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ for await... of
, ÑаÑÑмоÑÑим пеÑÐµÐ±Ð¾Ñ Ð´Ð°Ð½Ð½ÑÑ
из API. Ð ÑÑом пÑимеÑе ÑнаÑала ÑоздаÑÑÑÑ Ð°ÑинÑ
ÑоннÑй иÑеÑаÑÐ¾Ñ Ð´Ð»Ñ Ð¿Ð¾Ñока даннÑÑ
, а заÑем он иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑазмеÑа оÑвеÑа Ð¾Ñ API.
async function* streamAsyncIterator(stream) {
const reader = stream.getReader();
try {
while (true) {
const { done, value } = await reader.read();
if (done) {
return;
}
yield value;
}
} finally {
reader.releaseLock();
}
}
// Fetches data from url and calculates response size using the async generator.
async function getResponseSize(url) {
const response = await fetch(url);
// Will hold the size of the response, in bytes.
let responseSize = 0;
// The for-await-of loop. Async iterates over each portion of the response.
for await (const chunk of streamAsyncIterator(response.body)) {
// Incrementing the total response length.
responseSize += chunk.length;
}
console.log(`Response Size: ${responseSize} bytes`);
// expected output: "Response Size: 1071472"
return responseSize;
}
getResponseSize("https://jsonplaceholder.typicode.com/photos");
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4