AsyncGenerator
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since â¨2020å¹´1æâ©.
AsyncGenerator ãªãã¸ã§ã¯ãã¯éåæã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ããè¿ããããã®ã§ãéåæå復å¯è½ãããã³ã«ã¨éåæã¤ãã¬ã¼ã¿ã¼ãããã³ã«ã®ä¸¡æ¹ãæºãããã®ã§ãã
éåæã¸ã§ãã¬ã¼ã¿ã¼ã¡ã½ããã¯ã常㫠Promise ãªãã¸ã§ã¯ããçæãã¾ãã
AsyncGenerator ã¯é ãã¯ã©ã¹ã® AsyncIterator ã®ãµãã¯ã©ã¹ã§ãã
試ãã¦ã¿ã¾ããã
async function* foo() {
yield await Promise.resolve("a");
yield await Promise.resolve("b");
yield await Promise.resolve("c");
}
let str = "";
async function generate() {
for await (const val of foo()) {
str = str + val;
}
console.log(str);
}
generate();
// Expected output: "abc"
ã³ã³ã¹ãã©ã¯ã¿ã¼
AsyncGenerator ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ã°ãã¼ãã«ã«ã¯å©ç¨ã§ãã¾ãããAsyncGenerator ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ãéåæã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ããè¿ãããå¿
è¦ãããã¾ãã
async function* createAsyncGenerator() {
yield await Promise.resolve(1);
yield await Promise.resolve(2);
yield await Promise.resolve(3);
}
const asyncGen = createAsyncGenerator();
asyncGen.next().then((res) => console.log(res.value)); // 1
asyncGen.next().then((res) => console.log(res.value)); // 2
asyncGen.next().then((res) => console.log(res.value)); // 3
å®éãAsyncGeneratorã³ã³ã¹ãã©ã¯ã¿ã¼ã«å¯¾å¿ããJavaScriptã®ã¨ã³ãã£ãã£ã¯ããã¾ãããéåæã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã«ãã£ã¦çæããããã¹ã¦ã®ãªãã¸ã§ã¯ãã«ãã£ã¦å
±æããããããã¿ã¤ããªãã¸ã§ã¯ãã§ããé ããªãã¸ã§ã¯ããããã ãã§ãããã®ãªãã¸ã§ã¯ãã¯ã¯ã©ã¹ã®ããã«è¦ããããã« AsyncGenerator.prototype ã¨ããã¹ã¿ã¤ã«ã§å¼ã°ãããã¨ãå¤ãã®ã§ãããAsyncGeneratorFunction.prototype.prototype ã¨å¼ã¶ã»ããé©åã§ãããããªããªã AsyncGeneratorFunction ã¯å®éã® JavaScript ã¨ã³ãã£ãã£ã§ããããã§ãã
ã¤ã³ã¹ã¿ã³ã¹ããããã£
ãããã®ããããã£ã¯ AsyncGenerator.prototype ã§å®ç¾©ããã¦ããããã¹ã¦ã® AsyncGenerator ã¤ã³ã¹ã¿ã³ã¹ã§å
±æããã¦ãã¾ãã
AsyncGenerator.prototype.constructor-
ã¤ã³ã¹ã¿ã³ã¹ãªãã¸ã§ã¯ãã使ããã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ã
AsyncGeneratorã¤ã³ã¹ã¿ã³ã¹ã®å ´åãåæå¤ã¯AsyncGeneratorFunction.prototypeã§ããã¡ã¢:
AsyncGeneratorã¯çæããéåæã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ãæ ¼ç´ãã¦ããããã§ã¯ããã¾ããã AsyncGenerator.prototype[Symbol.toStringTag]-
@@toStringTagããããã£ã®åæå¤ã¯ãæåå"AsyncGenerator"ã§ãããã®ããããã£ã¯Object.prototype.toString()ã§ä½¿ç¨ããã¾ãã
ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãã
親ã§ãã AsyncIterator ããã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãããç¶æ¿ãã¦ãã¾ãã
AsyncGenerator.prototype.next()-
Promiseãè¿ãã¾ããããã¯ãyieldå¼ã§è¿ãããæå®ãããå¤ã§è§£æ±ºããã¾ãã AsyncGenerator.prototype.return()-
ã¸ã§ãã¬ã¼ã¿æ¬ä½ã«ç¾å¨ã®åæ¢ä½ç½®ã«
returnæãæ¿å ¥ãããã®ããã«åä½ãã¾ããtry...finallyãããã¯ã¨çµã¿åãããã¨ã¸ã§ãã¬ã¼ã¿ã¼ãçµäºããã¯ãªã¼ã³ã¢ããã¿ã¹ã¯ãå®è¡ãããã¨ãã§ãã¾ãã AsyncGenerator.prototype.throw()-
ã¸ã§ãã¬ã¼ã¿ã¼æ¬ä½ã®ç¾å¨ã®åæ¢ä½ç½®ã«
throwæãæ¿å ¥ããããã®ããã«åä½ãã¾ããããã¯ãã¸ã§ãã¬ã¼ã¿ã¼ã«ã¨ã©ã¼ç¶æ ãéç¥ããã¨ã©ã¼ãå¦çããããã¯ãªã¼ã³ã¢ãããå®è¡ãã¦èªèº«ãçµäºããããã¨ãã§ãã¾ãã
ä¾
>éåæã¸ã§ãã¬ã¼ã¿ã¼ã®å復å¦ç
次ã®ä¾ã§ã¯ãéåæã¸ã§ãã¬ã¼ã¿ã¼ãå復å¦çããæéééãçããªããã¨ã« 1ï½6 ã®å¤ãã³ã³ã½ã¼ã«ã«åºåãã¦ãã¾ããæå»ãå¤ãããã³ã«ãããã¹ãçæããã¾ããããã㯠for await...of ã«ã¼ãã®ä¸ã§èªåçã«è§£æ±ºããããã¨ã«æ³¨æãã¦ãã ããã
// éåæã¿ã¹ã¯ã§ããå®éã«ã¯ãã£ã¨æçãªãã¨ã使ç¨ãã¦ãããã¨ã
// æ³å®ãã¦ãã ããã
function delayedValue(time, value) {
return new Promise((resolve /*, reject*/) => {
setTimeout(() => resolve(value), time);
});
}
async function* generate() {
yield delayedValue(2000, 1);
yield delayedValue(100, 2);
yield delayedValue(500, 3);
yield delayedValue(250, 4);
yield delayedValue(125, 5);
yield delayedValue(50, 6);
console.log("All done!");
}
async function main() {
for await (const value of generate()) {
console.log("value", value);
}
}
main().catch((e) => console.error(e));
仿§æ¸
| Specification |
|---|
| ECMAScript® 2026 Language Specification > # sec-asyncgenerator-objects > |