คีย์เวิร์ด yield ใช้ใน JavaScript เพื่อ หยุดชั่วคราว (pause) และดำเนินต่อ (resume) generator function ค่าของ expression จะถูกคืนให้ caller ของ generator
ตัวอย่าง:
function* displayRank() {
var selPlayers = [1, 2, 3, 4];
for (var a = 0; a < selPlayers.length; a++) {
yield selPlayers[a]; // ตรงนี้แก้ i → a
}
}
หลังจากกำหนด generator function ใช้งานได้ดังนี้:
var rank = displayRank(); // สร้าง generator object // value: 1 alert(rank.next()); // value: 2 alert(rank.next()); // value: 3 alert(rank.next()); // value: 4 alert(rank.next()); // value: undefined (จบ iteration) alert(rank.next());
รายละเอียด Generator Functions
- ประกาศด้วย
function*(asterisk) - คืนค่า Generator object (implements Iterator protocol)
yieldหยุด execution และคืนค่า { value, done }next()เรียกต่อจากจุดที่หยุด- ใช้สำหรับ: lazy evaluation, infinite sequences, async flow control
ตัวอย่างเพิ่มเติม: Infinite Sequence
function* idGenerator() {
let id = 0;
while (true) yield id++;
}
const gen = idGenerator();
console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
// ไม่มีที่จบ