Baseline Widely available
async function*
宣è¨ã¯éåæã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ãå®ç¾©ãããã㯠AsyncGenerator
ãªãã¸ã§ã¯ããè¿ãã¾ãã
éåæã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã¯ãAsyncGeneratorFunction
ã³ã³ã¹ãã©ã¯ã¿ã¼ã async function*
å¼ã®æ§æã使ç¨ãã¦å®ç¾©ãããã¨ãã§ãã¾ãã
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"
æ§æ
async function* name(param0) {
statements
}
async function* name(param0, param1) {
statements
}
async function* name(param0, param1, /* ⦠,*/ paramN) {
statements
}
ã¡ã¢: éåæã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã«ã¯ã対å¿ããã¢ãã¼é¢æ°ã¯ããã¾ããã
弿°name
颿°åã§ãã
param
çç¥å¯
颿°ã®æ§æä¸ã®å¼æ°åã§ãã
statements
çç¥å¯
颿°ã®æ¬ä½ãæ§æããæã§ãã
éåæã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã¯ãéåæé¢æ°ã¨ã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã®æ©è½ãçµã¿åããããã®ã§ãã颿°ã®å
é¨ã§ await
㨠yield
ã®ãã¼ã¯ã¼ãã®ä¸¡æ¹ã使ããã¨ãã§ãã¾ããããã«ãããã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã®é
å»¶ã®æ§è³ªãå©ç¨ããªãããawait
ã§äººéå·¥å¦çã«éåæã¿ã¹ã¯ãå¦çãããã¨ãã§ããããã«ãªãã¾ãã
function*
ã§å®£è¨ãããé常ã®ã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã¨ã¯ç°ãªããéåæã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã¯ AsyncGenerator
ãªãã¸ã§ã¯ããè¿ãã¾ããéåæå復å¯è½ãããã³ã«ã«æºæ ãã¦ãã¾ããnext()
ãå¼ã³åºããã³ã«ãã¤ãã¬ã¼ã¿ã¼ã®çµæãªãã¸ã§ã¯ãã«è§£æ±ºãã Promise
ãè¿ãã¾ãã
éåæã¸ã§ãã¬ã¼ã¿ã¼ãããããã¹ãçæãããã¨ãã¤ãã¬ã¼ã¿ã¼ã®çµæã®ãããã¹ã®æçµçãªç¶æ ã¯ãçæããããããã¹ã®ç¶æ ã¨ä¸è´ãã¾ããä¾ãã°æ¬¡ã®ããã«ãªãã¾ãã
async function* foo() {
yield Promise.reject(1);
}
foo()
.next()
.catch((e) => console.error(e));
çæããããããã¹ãæå¦ãããå ´åãã¤ãã¬ã¼ã¿ã¼ã®çµæãæå¦ãããããã1
ããã°åºåããã¾ããéåæã¸ã§ãã¬ã¼ã¿ã¼ã®è§£æ±ºçµæã® value
ããããã£ã¯ãå¥ã®ãããã¹ã«ã¯ãªãã¾ããã
async function*
宣è¨ã¯ããã®ã¹ã³ã¼ãã®å
é ã«å·»ãä¸ãããããã®ã¹ã³ã¼ãå
ã®ã©ãã§ãå¼ã³åºããã¨ãã§ãã¾ãã
éåæã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ã¯ã常ã«çµæã®ãããã¹ãçæãã¾ããããããã® yield
æé ãåæçã§ãã£ã¦ãã§ãã
async function* myGenerator(step) {
await new Promise((resolve) => setTimeout(resolve, 10));
yield 0;
yield step;
yield step * 2;
}
const gen = myGenerator(2);
gen
.next()
.then((res) => {
console.log(res); // { value: 0, done: false }
return gen.next();
})
.then((res) => {
console.log(res); // { value: 2, done: false }
return gen.next();
})
.then((res) => {
console.log(res); // { value: 4, done: false }
return gen.next();
})
.then((res) => {
console.log(res); // { value: undefined, done: true }
return gen.next();
});
éåæã¸ã§ãã¬ã¼ã¿ã¼é¢æ°ãç¨ãã¦ä¸é£ã®ãã¡ã¤ã«ãèªã¿è¾¼ã
ãã®ä¾ã§ã¯ãNode ã® fs/promises
ã¢ã¸ã¥ã¼ã«ã使ç¨ãã¦ãä¸é£ã®ãã¡ã¤ã«ãèªã¿ããªã¯ã¨ã¹ããããã¨ãã ããã®ã³ã³ãã³ãã«ã¢ã¯ã»ã¹ããããã«ãã¦ãã¾ãã
async function* readFiles(directory) {
const files = await fs.readdir(directory);
for (const file of files) {
const stats = await fs.stat(file);
if (stats.isFile()) {
yield {
name: file,
content: await fs.readFile(file, "utf8"),
};
}
}
}
const files = readFiles(".");
console.log((await files.next()).value);
// Possible output: { name: 'file1.txt', content: '...' }
console.log((await files.next()).value);
// Possible output: { name: 'file2.txt', content: '...' }
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
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