2017-06-16 5 views
-1

次の構文は何を意味しますか?私は収穫後に*の使用を理解していません。私は発電機、Reduxの、そしてサガに新たなんだので、私はどのような構文*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. yield *ステートメントが含まれているため、builder()関数に発電機にするには、なぜ*が必要になりませんか?これは、yield *takeEvery()がジェネレータ関数sagaFunction()にラップされているためですか?
  3. 特に、その前に*があるとすれば、takeEvery()の機能は何ですか?私はtakeEvery()だと思います。そのdocumentationに基づいて、loadData()LOAD_DATAのすべてに適用すると思います。しかし、LOAD_DATAが配列でない場合は、takeEvery()がこのコードに必要ですか?
  4. どのように宣言には、return function *(action)関数の名前がないようですか?それは入力パラメータactionを持つジェネレータを宣言し、そのジェネレータをconstloadDataと割り当てていますか?
  5. このコードで作成された発電機でSagaライブラリから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を参照してください。

関連する問題