2017-06-16 49 views
-1

下面的語法是什麼意思?收益後我不明白使用*。我是新來的發電機,終極版和傳奇故事,所以我希望得到一些幫助理解什麼語法*takeEvery(),和return function *(action) {做:這個生成器的語法是做什麼的?

var MIDDLEWARES = [] 

function builder() { 
    const LOAD_DATA = "POI_LOADER/LOAD_POIS" 
    MIDDLEWARES.push(function *sagaFunction() { 
     yield *takeEvery(LOAD_DATA, loadData(statusField)) 
    }) 
} 

const loadData = (statusField) => { 
    return function *(action) { 
     console.log("action.venueId = " + action.venueId) 
    } 
} 

這裏還有幾個問題:

  1. yield *takeEvery()中的*是什麼意思?似乎由Delegated yield (yield star, yield *) in generator functions回答。
  2. 爲什麼builder()函數不需要*使它成爲發生器,因爲它包含yield *語句?那是因爲yield *takeEvery()是否包裹在發電機功能sagaFunction()
  3. takeEvery()函數做了什麼,特別是它前面有一個*?我認爲takeEvery()。基於它的documentation,我認爲它適用於LOAD_DATA中的所有內容loadData()。但是,如果LOAD_DATA不是數組,那麼在此代碼中是否需要takeEvery()
  4. 聲明return function *(action)怎麼看起來沒有這個函數的名字?它是否聲明一個輸入參數爲action的發電機,並將該發電機分配給const,稱爲loadData
  5. 佐賀圖書館是否在此代碼中創建的生成器上調用next()
+0

這是合法嗎?它看起來很奇怪。 '*'是關鍵字的一部分,即它是'function *'和'yield *'。我不知道空白是允許的,這太瘋狂了。 –

+0

[clicky](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/yield*) – Cypher

回答

1

因此,發電機允許通過使用yield返回發電機功能的值,然後在下次調用時從那裏恢復執行。

yield*用於指示返回的值是從另一個發電機來 - 這樣調用yield*發電機功能在這種情況下,委託實際創造價值另一個發生器功能。

有關更多信息,請參閱MDN on this