iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
0

Generator 是 ES6 新加入的標準。

Generator 是一種特殊類型的函式,一般的函式只會回傳一個值,但是 generator 卻會對不同的請求分別產生一個值回傳,而且在請求之間暫停程式的執行。

function* gen() {
	yield 1;
	yield 2;
	yield 3;
}

var generator = gen();
console.log(generator.next().value); // 1
console.log(generator.next().value); // 2
console.log(generator.next().value); // 3

Generator 的寫法初次看到會覺得很奇怪,是在function後面加一個*,在程式碼裡面,在要回傳的值前面加上yield關鍵字。

直接呼叫 generator 並不會得到我們要的回傳值,而是一個 iteratorobject,透過它我們才可以和 generator 互動,利用這個物件提供的方法來操控 generator。

Iterator 提供了.next()的方法,讓 generator 從上次暫停的地方開始執行,到下一個 yield關鍵字或是函式結束為止。但是 iterator 給我們的並非只是計算出來的值,而是一個物件,裡面包含有 iterator 狀態的done屬性,以及計算值的value屬性。如果 iterator 還沒有結束,done的值是false,如果全部的程式碼都跑完了,就會變成true,而這個 iterator 就不能再使用了。


上一篇
Day 11: 探索閉包的運作方式
下一篇
Day 13: Promise
系列文
JavaScript 忍者的修練--從下忍進階到中忍30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
hannahpun
iT邦新手 3 級 ‧ 2019-09-15 13:27:38

求問什麼時候該用 generator 什麼時候要用 promise ?

我要留言

立即登入留言