| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/for-await...of | [Back] [Original] |
Get to know MDN better
Esta pgina foi traduzida do ingls pela comunidade. Saiba mais e junte-se comunidade MDN Web Docs.
This feature is well established and works across many devices and browser versions. Its been available across browsers since janeiro de 2020.
A declarao for await...of cria um loop que itera sobre objetos iterveis assncronos, bem como sobre iterveis sncronos, incluindo: String, Array, Array-como objetos (e.g., arguments or NodeList), TypedArray, Map, Set, e iterveis async/sync. Invoca um hook de iterao personalizado com instrues a serem executadas para o valor de cada propriedade do objeto.
for await (varivel of itervel) {
// declarao
}
varivelEm cada iterao, o valor de uma propriedade diferente atribudo varivel. A varivel pode ser declarada como const, let ou var.
itervelObjeto cujas propriedades iterveis devem ser iteradas.
Voc tambm pode iterar sobre um objeto que explicidamente implementa protocolo itervel assncrono(async iterable protocol):
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
Como os geradores assncronos implementam o protocolo assncrono Iterator, eles podem fazer um loop usando 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
Para termos um exemplo mais concreto de iterao sobre um generator assncrono usando for await... of, considere iterar sobre dados obtidos atravs de um fecth de uma API. Este exemplo cria primeiro um iterador assncrono para um stream de dados e depois usa-o para encontrar o tamanho da resposta da 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();
}
}
// Obtm dados do URL e calcula o tamanho da resposta usando o generator assncrono
async function getResponseSize(url) {
const response = await fetch(url);
// Guardar o tamanho do response em bytes.
let responseSize = 0;
// O for-wait-loop ir iterar de forma assncrona sobre cada parte do response.
for await (const chunk of streamAsyncIterator(response.body)) {
// Incrementa o valor do responseSize
responseSize += chunk.length;
}
console.log(`Response Size: ${responseSize} bytes`);
// output esperado:"Response Size: 1071472"
return responseSize;
}
getResponseSize("https://jsonplaceholder.typicode.com/photos");
| Specification |
|---|
| ECMAScript 2027 LanguageSpecification # sec-for-in-and-for-of-statements |
This page was last modified on 8 de nov. de 2023 by MDN contributors.
Your blueprint for a better internet.
Portions of this content are 19982026 by individual mozilla.org contributors. Content available under a Creative Commons license.
| Web Proxy Viewer | New URL | Original Page |