Generator function là một loại function đặc biệt có thể đi vào, đi ra và thoát một số lần. Bạn có thể nghe mọi người mô tả nó là "một hàm có thể bị tạm dừng"
Sự khác biệt duy nhất cho đến nay là Generator function được định nghĩa với function* chứ không phải function.
Khi tạo một generator function
function* abc(){//some code}
và khi gọi
const getABC = abc(); //iterator
thì getABC chính là một Generator function trả về iterator chưa hề được thực thi
Cứ mỗi lần iterator gọi phương thức next() thì Generator function sẽ xử lý cho đến "yielded / exited" tại đây có giá trị trả về chính và value, và nếu đã kết thúc thì done = true
Iterator Gồm 2 giá trị:
- value: Dữ liệu hiện tại của function* và hàm tạm dừng lại thoát ra tại điểm neo đó thông qua yielded / exited
- done: (true/false) cho biết hiện tại next() đã đi đến hết chưa?
Ví dụ:
function* abc(){
console.log("start");
yield "WAIT!!!";
console.log("end");
}
const getABC = abc(); //iterator
gọi lần 1: getABC.next();
{value: "WAIT!!!", done: false}
gọi lần 2: getABC.next();
{value: undefined, done: true}