জেনারেটর ফাংশন
জেনারেটর ফাংশন কোড এক্সিকিউশনকে ফাংশন এক্সিট এবং পরে রিজিউম করার মাঝপথে পজ (pause) করতে দেয়। এটি ফ্লো কন্ট্রোল ম্যানেজ করতে এবং অ্যাসিঙ্ক্রোনাস অপারেশন ক্যান্সেল করতে সাহায্য করে।
সিনট্যাক্স
function *myFunction() {}
// বা
function* myFunction() {}
// বা
function*myFunction() {}
নোট: function কীওয়ার্ডের পরে এস্টেরিস্ক (*) যোগ করতে ভুলবেন না।
উদাহরণ
<html>
<body>
<script>
function* display() {
var num = 1;
while (num < 5) {
yield num++;
}
}
var myGenerator = display();
document.write(myGenerator.next().value); // 1
document.write("<br>" + myGenerator.next().value); // 2
document.write("<br>" + myGenerator.next().value); // 3
document.write("<br>" + myGenerator.next().value); // 4
document.write("<br>" + myGenerator.next().value); // undefined (done: true)
</script>
</body>
</html>
জেনারেটর অবজেক্ট মেথড
const gen = myGenerator();
gen.next(); // { value: 1, done: false }
gen.next(10); // { value: 2, done: false } - আর্গুমেন্ট yield এক্সপ্রেশনে পাঠানো যায়
gen.return(99); // { value: 99, done: true } - জোরে শেষ করা
gen.throw(err); // এরর থ্রো করে জেনারেটরে
বাস্তব ব্যবহার
// Infinite sequence
function* fibonacci() {
let [a, b] = [0, 1];
while (true) {
yield a;
[a, b] = [b, a + b];
}
}
const fib = fibonacci();
for (let i = 0; i < 10; i++) {
console.log(fib.next().value); // 0, 1, 1, 2, 3, 5, 8, 13, 21, 34
}
// Async generator (ES2018)
async function* fetchPages(url) {
let nextUrl = url;
while (nextUrl) {
const response = await fetch(nextUrl);
const data = await response.json();
yield data.items;
nextUrl = data.nextPage;
}
}