Skip to content

Instantly share code, notes, and snippets.

@nmvuong92
Last active September 4, 2018 04:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nmvuong92/98b54add9e8dc872002d5a5c97e104f7 to your computer and use it in GitHub Desktop.
Save nmvuong92/98b54add9e8dc872002d5a5c97e104f7 to your computer and use it in GitHub Desktop.
ES6 Generator function

nó là gì?

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"

khác gì với function thông thườ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.

iterator?

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}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment