2017-09-20 13 views
0

質問には、最初のiterator.next()コールに値を渡すのが理にかなっているのですか、それとも常に無視されるのでしょうか?例として:ジェネレータイテレータの最初の次の呼び出しに値を含めることは意味がありますか?

function* foo(x) { 
 
    var y = 2 * (yield(x + 1)); 
 
    var z = yield(y/3); 
 
    return (x + y + z); 
 
} 
 

 
var it = foo(5); 
 

 
// note: not sending anything into `next()` here 
 
console.log(it.next()); // { value:6, done:false } 
 
console.log(it.next(12)); // { value:8, done:false } 
 
console.log(it.next(13)); // { value:42, done:true }

注意最初next()に渡される値が存在しません。しかし、私が勉強しようとしている記事では、次のように述べています。

しかし、最初の次の(..)呼び出しに値を渡しても何も起こりません。

大丈夫です。それは理にかなっている。しかし、今では、値を渡すことにメリットがあるユースケースがあるかどうか(または利用することすら可能かどうか)を知りたいと思っています。

記事:https://davidwalsh.name/es6-generators

+0

* next *呼び出しで渡された引数は、前回の* yield *式から返された値を置き換えます。最初の呼び出しには以前の* yield *がないので、置き換えるものはないので、それを含めるためのユースケースはないようです。 – RobG

答えて

0

は、それは常に無視されますか?

Yes.

値で渡すと利益を有するユースケースですか?

残りのコードを簡素化するとき。あなたの例では、ループを使用して代わりにそれを書くことができること:

const it = foo(5); 
for (let i=11; i<=13; i++) 
    console.log(it.next(i)); 

今、私たちはどこにでも値のための使用はありません場合でも.nextに最初の呼び出しに11を渡しています。

関連する問題