javascript – 是否可以將ECMAScript 6生成器重置為初始狀態?
我的問題是:給定提供的(非常簡單的)生成器,是否可以將發生器返回到原來的狀態再次使用?
var generator = function*() { yield 1; yield 2; yield 3; }; var iterable = generator(); for (let x of iterable) { console.log(x); } // At this point, iterable is consumed. // Is there a method for moving iterable back // to the start point by only without re-calling generator(), // (or possibly by re-calling generator(), only by using prototype //or constructor methods available within the iterable object) // so the following code would work again? for (let x of iterable) { console.log(x); }
我希望能夠將迭代傳遞給其他範圍,迭代它,做一些其他的東西,然後可以在同一範圍內再次迭代.
如果你的意圖是
to some other scope, iterate over it, do some other stuff, then be able to iterate over it again later on in that same scope.
那麼你不應該嘗試的只是傳遞迭代器,而是通過生成器:
var generator = function*() { yield 1; yield 2; yield 3; }; var user = function(generator){ for (let x of generator()) { console.log(x); } for (let x of generator()) { console.log(x); } }
或者只是做一個“迴圈”迭代器,並在迭代時檢查
var generator = function*() { while(true){ yield 1; yield 2; yield 3; } }; for( x in i ){ console.log(x); if(x === 3){ break; } }
程式碼日誌版權宣告:
翻譯自:http://stackoverflow.com/questions/23848113/is-it-possible-to-reset-an-ecmascript-6-generator-to-its-initial-state