JavaScriptéåæã€ãã¬ãŒã¿ãã¿ãŒã³ã§å¹ççãªã¹ããªãŒã ããŒã¿åŠçãæ¢æ±ãå€§èŠæš¡ããŒã¿ã»ãããAPIå¿çããªã¢ã«ã¿ã€ã ã¹ããªãŒã ãæ±ãããã®éåæå埩ã®å®è£ ããå®è·µçãªäŸãšãŠãŒã¹ã±ãŒã¹ã§åŠã³ãŸãã
JavaScriptéåæã€ãã¬ãŒã¿ãã¿ãŒã³ïŒã¹ããªãŒã èšèšã®ããã®å æ¬çã¬ã€ã
çŸä»£ã®JavaScriptéçºãç¹ã«ããŒã¿éçŽåã¢ããªã±ãŒã·ã§ã³ããªã¢ã«ã¿ã€ã ããŒã¿ã¹ããªãŒã ãæ±ãå Žåã«ãããŠãå¹ççã§éåæçãªããŒã¿åŠçã®å¿ èŠæ§ã¯æéèŠã§ããECMAScript 2018ã§å°å ¥ãããéåæã€ãã¬ãŒã¿ãã¿ãŒã³ã¯ãããŒã¿ã¹ããªãŒã ãéåæã«åŠçããããã®åŒ·åã§æŽç·Žããããœãªã¥ãŒã·ã§ã³ãæäŸããŸãããã®ããã°èšäºã§ã¯ãéåæã€ãã¬ãŒã¿ãã¿ãŒã³ã®æ·±å±€ã«è¿«ãããã®æŠå¿µãå®è£ ããŠãŒã¹ã±ãŒã¹ãããŸããŸãªã·ããªãªã§ã®å©ç¹ãæ¢ããŸããããã¯ãçŸä»£ã®ã°ããŒãã«ãªWebã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠäžå¯æ¬ ãªãããŒã¿ã¹ããªãŒã ãå¹ççãã€éåæã«æ±ãããã®ã²ãŒã ãã§ã³ãžã£ãŒã§ãã
ã€ãã¬ãŒã¿ãšãžã§ãã¬ãŒã¿ã®çè§£
éåæã€ãã¬ãŒã¿ã«é£ã³èŸŒãåã«ãJavaScriptã«ãããã€ãã¬ãŒã¿ãšãžã§ãã¬ãŒã¿ã®åºæ¬çãªæŠå¿µãç°¡åã«ããããããŸãããããããã¯éåæã€ãã¬ãŒã¿ãæ§ç¯ãããåºç€ã圢æããŸãã
ã€ãã¬ãŒã¿
ã€ãã¬ãŒã¿ã¯ãã·ãŒã±ã³ã¹ãå®çŸ©ããçµäºæã«ã¯æ»ãå€ãè¿ãå¯èœæ§ã®ãããªããžã§ã¯ãã§ããå
·äœçã«ã¯ãã€ãã¬ãŒã¿ã¯2ã€ã®ããããã£ãæã€ãªããžã§ã¯ããè¿ãnext()ã¡ãœãããå®è£
ããŸãïŒ
value: ã·ãŒã±ã³ã¹ã®æ¬¡ã®å€ãdone: ã€ãã¬ãŒã¿ãã·ãŒã±ã³ã¹ã®å埩ãå®äºãããã©ããã瀺ãããŒã«å€ãdoneãtrueã®å Žåãvalueã¯éåžžãã€ãã¬ãŒã¿ã®æ»ãå€ïŒããããã°ïŒã§ãã
以äžã¯åæã€ãã¬ãŒã¿ã®ç°¡åãªäŸã§ãïŒ
const myIterator = {
data: [1, 2, 3],
index: 0,
next() {
if (this.index < this.data.length) {
return { value: this.data[this.index++], done: false };
} else {
return { value: undefined, done: true };
}
},
};
console.log(myIterator.next()); // Output: { value: 1, done: false }
console.log(myIterator.next()); // Output: { value: 2, done: false }
console.log(myIterator.next()); // Output: { value: 3, done: false }
console.log(myIterator.next()); // Output: { value: undefined, done: true }
ãžã§ãã¬ãŒã¿
ãžã§ãã¬ãŒã¿ã¯ãã€ãã¬ãŒã¿ãããç°¡æœã«å®çŸ©ããæ¹æ³ãæäŸããŸãããããã¯äžæåæ¢ããã³åéãå¯èœãªé¢æ°ã§ãããyieldããŒã¯ãŒãã䜿çšããŠå埩ã¢ã«ãŽãªãºã ãããèªç¶ã«å®çŸ©ã§ããŸãã
以äžã¯äžèšãšåãäŸã§ããããžã§ãã¬ãŒã¿é¢æ°ã䜿çšããŠå®è£ ãããã®ã§ãïŒ
function* myGenerator(data) {
for (let i = 0; i < data.length; i++) {
yield data[i];
}
}
const iterator = myGenerator([1, 2, 3]);
console.log(iterator.next()); // Output: { value: 1, done: false }
console.log(iterator.next()); // Output: { value: 2, done: false }
console.log(iterator.next()); // Output: { value: 3, done: false }
console.log(iterator.next()); // Output: { value: undefined, done: true }
yieldããŒã¯ãŒãã¯ãžã§ãã¬ãŒã¿é¢æ°ãäžæåæ¢ããæå®ãããå€ãè¿ããŸãããžã§ãã¬ãŒã¿ã¯åŸã§äžæããå Žæããåéã§ããŸãã
éåæã€ãã¬ãŒã¿ã®ç޹ä»
éåæã€ãã¬ãŒã¿ã¯ãã€ãã¬ãŒã¿ã®æŠå¿µãéåææäœãæ±ãããã«æ¡åŒµãããã®ã§ããAPIããã®ããŒã¿ååŸããã¡ã€ã«ããã®èªã¿èŸŒã¿ãªã©ãåèŠçŽ ãéåæã«ååŸãŸãã¯åŠçãããããŒã¿ã¹ããªãŒã ã§åäœããããã«èšèšãããŠããŸããããã¯ç¹ã«Node.jsç°å¢ããã©ãŠã¶ã§éåæããŒã¿ãæ±ãå Žåã«äŸ¿å©ã§ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããã®å¿çæ§ãé«ããã°ããŒãã«ã«é¢é£æ§ããããŸãã
éåæã€ãã¬ãŒã¿ã¯ãåæã€ãã¬ãŒã¿ãšåæ§ã«valueãšdoneããããã£ãæã€ãªããžã§ã¯ãã«è§£æ±ºãããPromiseãè¿ãnext()ã¡ãœãããå®è£
ããŸããéèŠãªéãã¯ãnext()ã¡ãœãããPromiseãè¿ãããã«ãªããéåææäœãå¯èœã«ãªãç¹ã§ãã
éåæã€ãã¬ãŒã¿ã®å®çŸ©
以äžã¯åºæ¬çãªéåæã€ãã¬ãŒã¿ã®äŸã§ãïŒ
const myAsyncIterator = {
data: [1, 2, 3],
index: 0,
async next() {
await new Promise(resolve => setTimeout(resolve, 500)); // Simulate async operation
if (this.index < this.data.length) {
return { value: this.data[this.index++], done: false };
} else {
return { value: undefined, done: true };
}
},
};
async function consumeIterator() {
console.log(await myAsyncIterator.next()); // Output: { value: 1, done: false }
console.log(await myAsyncIterator.next()); // Output: { value: 2, done: false }
console.log(await myAsyncIterator.next()); // Output: { value: 3, done: false }
console.log(await myAsyncIterator.next()); // Output: { value: undefined, done: true }
}
consumeIterator();
ãã®äŸã§ã¯ãnext()ã¡ãœããã¯setTimeoutã䜿çšããŠéåææäœãã·ãã¥ã¬ãŒãããŠããŸããconsumeIterator颿°ã¯ãnext()ããè¿ãããPromiseã解決ãããã®ãawaitã§åŸ
ã£ãŠããçµæããã°ã«åºåããŸãã
éåæãžã§ãã¬ãŒã¿
åæãžã§ãã¬ãŒã¿ãšåæ§ã«ãéåæãžã§ãã¬ãŒã¿ã¯éåæã€ãã¬ãŒã¿ããã䟿å©ã«äœæããæ¹æ³ãæäŸããŸãããããã¯äžæåæ¢ããã³åéãå¯èœãªé¢æ°ã§ãããyieldããŒã¯ãŒãã䜿çšããŠPromiseãè¿ããŸãã
éåæãžã§ãã¬ãŒã¿ãå®çŸ©ããã«ã¯ãasync function*æ§æã䜿çšããŸãããžã§ãã¬ãŒã¿å
ã§ã¯ãawaitããŒã¯ãŒãã䜿çšããŠéåææäœãå®è¡ã§ããŸãã
以äžã¯äžèšãšåãäŸã§ãããéåæãžã§ãã¬ãŒã¿ã䜿çšããŠå®è£ ãããã®ã§ãïŒ
async function* myAsyncGenerator(data) {
for (let i = 0; i < data.length; i++) {
await new Promise(resolve => setTimeout(resolve, 500)); // Simulate async operation
yield data[i];
}
}
async function consumeGenerator() {
const iterator = myAsyncGenerator([1, 2, 3]);
console.log(await iterator.next()); // Output: { value: 1, done: false }
console.log(await iterator.next()); // Output: { value: 2, done: false }
console.log(await iterator.next()); // Output: { value: 3, done: false }
console.log(await iterator.next()); // Output: { value: undefined, done: true }
}
consumeGenerator();
for await...ofã«ããéåæã€ãã¬ãŒã¿ã®å©çš
for await...ofã«ãŒãã¯ãéåæã€ãã¬ãŒã¿ãå©çšããããã®ã¯ãªãŒã³ã§èªã¿ãããæ§æãæäŸããŸããã€ãã¬ãŒã¿ã«ãã£ãŠyieldãããå€ãèªåçã«å埩åŠçããã«ãŒãæ¬äœãå®è¡ããåã«åPromiseã解決ãããã®ãåŸ
ã¡ãŸããããã«ããéåæã³ãŒããç°¡çŽ åãããèªã¿ãããä¿å®ãããããªããŸãããã®æ©èœã¯ãããã¯ãªãŒã³ã§èªã¿ãããéåæã¯ãŒã¯ãããŒãã°ããŒãã«ã«ä¿é²ããŸãã
以äžã¯ãåã®äŸã®éåæãžã§ãã¬ãŒã¿ã§for await...ofã䜿çšããäŸã§ãïŒ
async function* myAsyncGenerator(data) {
for (let i = 0; i < data.length; i++) {
await new Promise(resolve => setTimeout(resolve, 500)); // Simulate async operation
yield data[i];
}
}
async function consumeGenerator() {
for await (const value of myAsyncGenerator([1, 2, 3])) {
console.log(value); // Output: 1, 2, 3 (with a 500ms delay between each)
}
}
consumeGenerator();
for await...ofã«ãŒãã«ãããéåæã®å埩åŠçãã¯ããã«ç°¡åã§çè§£ãããããªããŸãã
éåæã€ãã¬ãŒã¿ã®ãŠãŒã¹ã±ãŒã¹
éåæã€ãã¬ãŒã¿ã¯éåžžã«æ±çšæ§ãé«ããéåæããŒã¿åŠçãå¿ èŠãªããŸããŸãªã·ããªãªã«é©çšã§ããŸãã以äžã«äžè¬çãªãŠãŒã¹ã±ãŒã¹ãããã€ã瀺ããŸãïŒ
1. 倧容éãã¡ã€ã«ã®èªã¿èŸŒã¿
倧容éãã¡ã€ã«ãæ±ãéããã¡ã€ã«å šäœãäžåºŠã«ã¡ã¢ãªã«èªã¿èŸŒãã®ã¯éå¹çã§ãªãœãŒã¹ã倧éã«æ¶è²»ããŸããéåæã€ãã¬ãŒã¿ã¯ããã¡ã€ã«ãéåæã«ãã£ã³ã¯åäœã§èªã¿èŸŒã¿ãå©çšå¯èœã«ãªã£ãåãã£ã³ã¯ãåŠçããæ¹æ³ãæäŸããŸããããã¯ç¹ã«ãµãŒããŒãµã€ãã¢ããªã±ãŒã·ã§ã³ãNode.jsç°å¢ã§éèŠã§ãã
const fs = require('fs');
const readline = require('readline');
async function* readLines(filePath) {
const fileStream = fs.createReadStream(filePath);
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
for await (const line of rl) {
yield line;
}
}
async function processFile(filePath) {
for await (const line of readLines(filePath)) {
console.log(`Line: ${line}`);
// Process each line asynchronously
}
}
// Example usage
// processFile('path/to/large/file.txt');
ãã®äŸã§ã¯ãreadLines颿°ããã¡ã€ã«ãéåæã«äžè¡ãã€èªã¿èŸŒã¿ãåè¡ãåŒã³åºãå
ã«yieldããŸãããããŠprocessFile颿°ããã®è¡ãå©çšããéåæã«åŠçããŸãã
2. APIããã®ããŒã¿ååŸ
APIããããŒã¿ãååŸããéãç¹ã«ããŒãžããŒã·ã§ã³ãå€§èŠæš¡ãªããŒã¿ã»ãããæ±ãå Žåãéåæã€ãã¬ãŒã¿ã䜿çšããŠããŒã¿ããã£ã³ã¯åäœã§ååŸãåŠçããããšãã§ããŸããããã«ãããããŒã¿ã»ããå šäœãäžåºŠã«ã¡ã¢ãªã«ããŒãããã®ãé¿ããæ®µéçã«åŠçã§ããŸããå€§èŠæš¡ãªããŒã¿ã»ããã§ãå¿çæ§ã確ä¿ããããŸããŸãªã€ã³ã¿ãŒãããé床ãå°åã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããŸãã
async function* fetchPaginatedData(url) {
let nextUrl = url;
while (nextUrl) {
const response = await fetch(nextUrl);
const data = await response.json();
for (const item of data.results) {
yield item;
}
nextUrl = data.next;
}
}
async function processData() {
for await (const item of fetchPaginatedData('https://api.example.com/data')) {
console.log(item);
// Process each item asynchronously
}
}
// Example usage
// processData();
ãã®äŸã§ã¯ãfetchPaginatedData颿°ãããŒãžåå²ãããAPIãšã³ããã€ã³ãããããŒã¿ãååŸããåé
ç®ãåŒã³åºãå
ã«yieldããŸãããããŠprocessData颿°ããã®é
ç®ãå©çšããéåæã«åŠçããŸãã
3. ãªã¢ã«ã¿ã€ã ããŒã¿ã¹ããªãŒã ã®åŠç
éåæã€ãã¬ãŒã¿ã¯ãWebSocketããµãŒããŒéä¿¡ã€ãã³ããªã©ã®ãªã¢ã«ã¿ã€ã ããŒã¿ã¹ããªãŒã ã®åŠçã«ãé©ããŠããŸããã¡ã€ã³ã¹ã¬ããããããã¯ããããšãªããå°çããããŒã¿ããã®ãŸãŸåŠçã§ããŸããããã¯ãå¿çæ§ãé«ãã¹ã±ãŒã©ãã«ãªãªã¢ã«ã¿ã€ã ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããäžã§äžå¯æ¬ ã§ãããææ°ã®æŽæ°ãå¿ èŠãšãããµãŒãã¹ã«ãšã£ãŠéèŠã§ãã
async function* processWebSocketStream(socket) {
while (true) {
const message = await new Promise((resolve, reject) => {
socket.onmessage = (event) => {
resolve(event.data);
};
socket.onerror = (error) => {
reject(error);
};
});
yield message;
}
}
async function consumeWebSocketStream(socket) {
for await (const message of processWebSocketStream(socket)) {
console.log(`Received message: ${message}`);
// Process each message asynchronously
}
}
// Example usage
// const socket = new WebSocket('ws://example.com/socket');
// consumeWebSocketStream(socket);
ãã®äŸã§ã¯ãprocessWebSocketStream颿°ãWebSocketæ¥ç¶ããã®ã¡ãã»ãŒãžããªãã¹ã³ããåã¡ãã»ãŒãžãåŒã³åºãå
ã«yieldããŸãããããŠconsumeWebSocketStream颿°ããã®ã¡ãã»ãŒãžãå©çšããéåæã«åŠçããŸãã
4. ã€ãã³ãé§åã¢ãŒããã¯ãã£
éåæã€ãã¬ãŒã¿ã¯ãã€ãã³ãé§åã¢ãŒããã¯ãã£ã«çµ±åããŠã€ãã³ããéåæã«åŠçããããšãã§ããŸããããã«ãããã¡ã€ã³ã¹ã¬ããããããã¯ããããšãªãããªã¢ã«ã¿ã€ã ã§ã€ãã³ãã«åå¿ããã·ã¹ãã ãæ§ç¯ã§ããŸããã€ãã³ãé§åã¢ãŒããã¯ãã£ã¯ããŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ãã·ã¹ãã ã€ãã³ãã«è¿ éã«å¿çããå¿ èŠããããçŸä»£çã§ã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠéèŠã§ãã
const EventEmitter = require('events');
async function* eventStream(emitter, eventName) {
while (true) {
const value = await new Promise(resolve => {
emitter.once(eventName, resolve);
});
yield value;
}
}
async function consumeEventStream(emitter, eventName) {
for await (const event of eventStream(emitter, eventName)) {
console.log(`Received event: ${event}`);
// Process each event asynchronously
}
}
// Example usage
// const myEmitter = new EventEmitter();
// consumeEventStream(myEmitter, 'data');
// myEmitter.emit('data', 'Event data 1');
// myEmitter.emit('data', 'Event data 2');
ãã®äŸã§ã¯ãEventEmitterã«ãã£ãŠçºè¡ãããã€ãã³ãããªãã¹ã³ããéåæã€ãã¬ãŒã¿ãäœæããŸããåã€ãã³ãã¯ã³ã³ã·ã¥ãŒãã«yieldãããã€ãã³ãã®éåæåŠçãå¯èœã«ãªããŸããã€ãã³ãé§åã¢ãŒããã¯ãã£ãšã®çµ±åã«ãããã¢ãžã¥ãŒã«åŒã§ãªã¢ã¯ãã£ããªã·ã¹ãã ãå¯èœã«ãªããŸãã
éåæã€ãã¬ãŒã¿ã䜿çšããå©ç¹
éåæã€ãã¬ãŒã¿ã¯ãåŸæ¥ã®éåæããã°ã©ãã³ã°æè¡ã«æ¯ã¹ãŠããã€ãã®å©ç¹ãæäŸããçŸä»£ã®JavaScriptéçºã«ãããŠäŸ¡å€ããããŒã«ãšãªã£ãŠããŸãããããã®å©ç¹ã¯ãããå¹ççã§ãå¿çæ§ãé«ããã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ã®äœæã«çŽæ¥è²¢ç®ããŸãã
1. ããã©ãŒãã³ã¹ã®åäž
ããŒã¿ãéåæã«ãã£ã³ã¯åäœã§åŠçããããšã«ãããéåæã€ãã¬ãŒã¿ã¯ããŒã¿éçŽåã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸããããŒã¿ã»ããå šäœãäžåºŠã«ã¡ã¢ãªã«ããŒãããã®ãé¿ããã¡ã¢ãªæ¶è²»ãåæžããå¿çæ§ãåäžãããŸããããã¯ãå€§èŠæš¡ãªããŒã¿ã»ããããªã¢ã«ã¿ã€ã ã®ããŒã¿ã¹ããªãŒã ãæ±ãã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠç¹ã«éèŠã§ãããè² è·ãããã£ãç¶æ ã§ãããã©ãŒãã³ã¹ãç¶æããŸãã
2. å¿çæ§ã®åäž
éåæã€ãã¬ãŒã¿ã䜿çšãããšãã¡ã€ã³ã¹ã¬ããããããã¯ããã«ããŒã¿ãåŠçã§ãããããã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒã®æäœã«å¯ŸããŠå¿çæ§ãç¶æããŸããããã¯ç¹ã«Webã¢ããªã±ãŒã·ã§ã³ã«ãããŠéèŠã§ãããå¿çæ§ã®é«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã¯è¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®ããã«äžå¯æ¬ ã§ããããŸããŸãªã€ã³ã¿ãŒãããé床ãæã€ã°ããŒãã«ãªãŠãŒã¶ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãé«ãè©äŸ¡ããã§ãããã
3. éåæã³ãŒãã®ç°¡çŽ å
éåæã€ãã¬ãŒã¿ã¯ãfor await...ofã«ãŒããšçµã¿åãããããšã§ãéåæããŒã¿ã¹ããªãŒã ãæ±ãããã®ã¯ãªãŒã³ã§èªã¿ãããæ§æãæäŸããŸããããã«ãããéåæã³ãŒããçè§£ãããããä¿å®ãããããªãããšã©ãŒã®å¯èœæ§ãæžå°ããŸããç°¡çŽ åãããæ§æã«ãããéçºè
ã¯éåæããã°ã©ãã³ã°ã®è€éãã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ã®ããžãã¯ã«éäžã§ããŸãã
4. ããã¯ãã¬ãã·ã£ãŒã®åŠç
éåæã€ãã¬ãŒã¿ã¯ãããŒã¿ã®çæãšæ¶è²»ã®é床ãå¶åŸ¡ããèœåã§ããããã¯ãã¬ãã·ã£ãŒåŠçãèªç¶ã«ãµããŒãããŸããããã¯ãã¢ããªã±ãŒã·ã§ã³ãããŒã¿ã®æŽªæ°Žã«å§åãããã®ãé²ãããã«éèŠã§ããã³ã³ã·ã¥ãŒãããããã¥ãŒãŒãµã«ãããªãããŒã¿ã®æºåãã§ããããšãéç¥ã§ããããã«ããããšã§ãéåæã€ãã¬ãŒã¿ã¯ã¢ããªã±ãŒã·ã§ã³ãé«è² è·äžã§ãå®å®ããŠããã©ãŒãã³ã¹ãç¶æããã®ã«åœ¹ç«ã¡ãŸããããã¯ãã¬ãã·ã£ãŒã¯ããªã¢ã«ã¿ã€ã ã®ããŒã¿ã¹ããªãŒã ã倧éã®ããŒã¿åŠçãæ±ãéã«ç¹ã«éèŠã§ãããã·ã¹ãã ã®å®å®æ§ã確ä¿ããŸãã
éåæã€ãã¬ãŒã¿ã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
éåæã€ãã¬ãŒã¿ãæå€§éã«æŽ»çšããããã«ã¯ãããã€ãã®ãã¹ããã©ã¯ãã£ã¹ã«åŸãããšãéèŠã§ãããããã®ã¬ã€ãã©ã€ã³ã¯ãã³ãŒããå¹ççã§ãä¿å®å¯èœã§ãå ç¢ã§ããããšãä¿èšŒããã®ã«åœ¹ç«ã¡ãŸãã
1. ãšã©ãŒãé©åã«åŠçãã
éåææäœãæ±ãéã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããã®ãé²ãããã«ãšã©ãŒãé©åã«åŠçããããšãéèŠã§ããéåæå埩äžã«çºçããå¯èœæ§ã®ãããšã©ãŒããã£ããããããã«try...catchãããã¯ã䜿çšããŠãã ãããé©åãªãšã©ãŒåŠçã¯ãäºæããªãåé¡ã«ééããå Žåã§ãã¢ããªã±ãŒã·ã§ã³ãå®å®ãããŸãŸã§ããããšãä¿èšŒããããå
ç¢ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«è²¢ç®ããŸãã
async function consumeGenerator() {
try {
for await (const value of myAsyncGenerator([1, 2, 3])) {
console.log(value);
}
} catch (error) {
console.error(`An error occurred: ${error}`);
// Handle the error
}
}
2. ããããã³ã°æäœãé¿ãã
éåææäœãçã«ãã³ããããã³ã°ã§ããããšã確èªããŠãã ãããéåæã€ãã¬ãŒã¿å ã§æéã®ãããåææäœãå®è¡ããããšã¯é¿ããŠãã ãããããã¯éåæåŠçã®å©ç¹ãç¡å¹ã«ããå¯èœæ§ããããŸãããã³ããããã³ã°æäœã¯ãã¡ã€ã³ã¹ã¬ãããå¿çæ§ãç¶æããããšãä¿èšŒããç¹ã«Webã¢ããªã±ãŒã·ã§ã³ã«ãããŠããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã
3. 䞊è¡åŠçãå¶éãã
è€æ°ã®éåæã€ãã¬ãŒã¿ãæ±ãéã«ã¯ãåææäœã®æ°ã«æ³šæããŠãã ããã䞊è¡åŠçãå¶éããããšã§ãã¢ããªã±ãŒã·ã§ã³ãå€ãããåæã¿ã¹ã¯ã«å§åãããã®ãé²ãããšãã§ããŸããããã¯ç¹ã«ãªãœãŒã¹ã倧éã«æ¶è²»ããæäœãæ±ãå ŽåããéããããªãœãŒã¹ã®ç°å¢ã§äœæ¥ããå Žåã«éèŠã§ããã¡ã¢ãªã®æ¯æžãããã©ãŒãã³ã¹ã®äœäžãšãã£ãåé¡ãé¿ããã®ã«åœ¹ç«ã¡ãŸãã
4. ãªãœãŒã¹ãã¯ãªãŒã³ã¢ãããã
éåæã€ãã¬ãŒã¿ã®äœ¿çšãçµãã£ãããããã䜿çšããŠããå¯èœæ§ã®ãããã¡ã€ã«ãã³ãã«ããããã¯ãŒã¯æ¥ç¶ãªã©ã®ãªãœãŒã¹ãå¿ ãã¯ãªãŒã³ã¢ããããŠãã ãããããã«ããããªãœãŒã¹ãªãŒã¯ãé²ããã¢ããªã±ãŒã·ã§ã³å šäœã®å®å®æ§ãåäžãããããšãã§ããŸããé©åãªãªãœãŒã¹ç®¡çã¯ãé·æéå®è¡ãããã¢ããªã±ãŒã·ã§ã³ããµãŒãã¹ã«ãšã£ãŠéèŠã§ãããæéãçµã£ãŠãå®å®æ§ãç¶æããããšãä¿èšŒããŸãã
5. è€éãªããžãã¯ã«ã¯éåæãžã§ãã¬ãŒã¿ã䜿çšãã
ããè€éãªå埩ããžãã¯ã«ã¯ãéåæãžã§ãã¬ãŒã¿ãããã¯ãªãŒã³ã§ä¿å®ããããæ¹æ³ã§éåæã€ãã¬ãŒã¿ãå®çŸ©ããŸããyieldããŒã¯ãŒãã䜿çšããŠãžã§ãã¬ãŒã¿é¢æ°ãäžæåæ¢ããã³åéã§ãããããå¶åŸ¡ãããŒã«ã€ããŠæšè«ãããããªããŸããéåæãžã§ãã¬ãŒã¿ã¯ãå埩ããžãã¯ãè€æ°ã®éåæã¹ããããæ¡ä»¶åå²ãå«ãå Žåã«ç¹ã«äŸ¿å©ã§ãã
éåæã€ãã¬ãŒã¿ vs. Observable
éåæã€ãã¬ãŒã¿ãšObservableã¯ã©ã¡ããéåæããŒã¿ã¹ããªãŒã ãæ±ãããã®ãã¿ãŒã³ã§ãããç°ãªãç¹æ§ãšãŠãŒã¹ã±ãŒã¹ãæã£ãŠããŸãã
éåæã€ãã¬ãŒã¿
- ãã«ããŒã¹ïŒã³ã³ã·ã¥ãŒããã€ãã¬ãŒã¿ããæ¬¡ã®å€ãæç€ºçã«èŠæ±ããŸãã
- åäžãµãã¹ã¯ãªãã·ã§ã³ïŒåã€ãã¬ãŒã¿ã¯äžåºŠããå©çšã§ããŸããã
- JavaScriptã«çµã¿èŸŒã¿ã®ãµããŒãïŒéåæã€ãã¬ãŒã¿ãš
for await...ofã¯èšèªä»æ§ã®äžéšã§ãã
Observable
- ããã·ã¥ããŒã¹ïŒãããã¥ãŒãµãŒãã³ã³ã·ã¥ãŒãã«å€ãããã·ã¥ããŸãã
- è€æ°ãµãã¹ã¯ãªãã·ã§ã³ïŒäžã€ã®Observableã¯è€æ°ã®ã³ã³ã·ã¥ãŒãã«ãã£ãŠãµãã¹ã¯ã©ã€ãã§ããŸãã
- ã©ã€ãã©ãªãå¿ èŠïŒObservableã¯éåžžãRxJSãªã©ã®ã©ã€ãã©ãªã䜿çšããŠå®è£ ãããŸãã
éåæã€ãã¬ãŒã¿ã¯ãã³ã³ã·ã¥ãŒããããŒã¿åŠçã®é床ãå¶åŸ¡ããå¿ èŠãããã·ããªãªãããšãã°å€§å®¹éãã¡ã€ã«ã®èªã¿èŸŒã¿ãããŒãžåå²ãããAPIããã®ããŒã¿ååŸãªã©ã«é©ããŠããŸããObservableã¯ããããã¥ãŒãµãŒãè€æ°ã®ã³ã³ã·ã¥ãŒãã«ããŒã¿ãããã·ã¥ããå¿ èŠãããã·ããªãªãããšãã°ãªã¢ã«ã¿ã€ã ããŒã¿ã¹ããªãŒã ãã€ãã³ãé§åã¢ãŒããã¯ãã£ãªã©ã«ããé©ããŠããŸããéåæã€ãã¬ãŒã¿ãšObservableã®ã©ã¡ããéžæãããã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®ããŒãºãšèŠä»¶ã«äŸåããŸãã
çµè«
JavaScriptã®éåæã€ãã¬ãŒã¿ãã¿ãŒã³ã¯ãéåæããŒã¿ã¹ããªãŒã ãæ±ãããã®åŒ·åã§æŽç·Žããããœãªã¥ãŒã·ã§ã³ãæäŸããŸããããŒã¿ãéåæã«ãã£ã³ã¯åäœã§åŠçããããšã«ãããéåæã€ãã¬ãŒã¿ã¯ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãšå¿çæ§ãåäžãããããšãã§ããŸããfor await...ofã«ãŒããéåæãžã§ãã¬ãŒã¿ãšçµã¿åãããããšã§ãéåæããŒã¿ãæ±ãããã®ã¯ãªãŒã³ã§èªã¿ãããæ§æãæäŸããŸãããã®ããã°èšäºã§æŠèª¬ãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãéåæã€ãã¬ãŒã¿ã®æœåšèœåãæå€§éã«æŽ»çšããå¹ççã§ãä¿å®å¯èœã§ãå
ç¢ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã
倧容éãã¡ã€ã«ãæ±ã£ãŠããå Žåã§ããAPIããããŒã¿ãååŸããŠããå Žåã§ãããªã¢ã«ã¿ã€ã ããŒã¿ã¹ããªãŒã ãåŠçããŠããå Žåã§ããã€ãã³ãé§åã¢ãŒããã¯ãã£ãæ§ç¯ããŠããå Žåã§ããéåæã€ãã¬ãŒã¿ã¯ããè¯ãéåæã³ãŒããæžãã®ã«åœ¹ç«ã¡ãŸãããã®ãã¿ãŒã³ãåãå ¥ããŠãJavaScriptéçºã¹ãã«ãåäžãããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã®ããã«ããå¹ççã§å¿çæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŸãããã