David Walsh O bir örnek olan bir blog about ES6 Generators
sahiptir
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 }
sizin örnek olarak imal Ama yine kullanıldığı durumdur. Onun Özetle
o
Bu yeni egzotik oyuncak kodunuz için pratik yapmaya ne olup bittiğini merak doğal olduğunu söylüyor. Gerçi onlar için daha çok şey var. sadece yüzeyi çizdik. Bu yüzden 'un ne kadar güçlü olabileceğini/keşfedebileceklerini keşfetmeden önce daha derine dalmamız gerekiyor.
- Hata işleme nasıl çalışır?
- Bir jeneratör başka bir jeneratöre çağrı yapabilir mi?
- Eşzamansız kodlama jeneratörlerle nasıl çalışır?
Bu sorular ve daha fazlası, sonraki makalelerde ele alınacaktır Burada kalmayın!
In a later blog o biraz daha gerçek dünya gibi görünüyor şu pasajı (ve bazı diğerleri)
// run (async) a generator to completion
// Note: simplified approach: no error handling here
function runGenerator(g) {
var it = g(), ret;
// asynchronously iterate over generator
(function iterate(val){
ret = it.next(val);
if (!ret.done) {
// poor man's "is it a promise?" test
if ("then" in ret.value) {
// wait on the promise
ret.value.then(iterate);
}
// immediate value: just send right back in
else {
// avoid synchronous recursion
setTimeout(function(){
iterate(ret.value);
}, 0);
}
}
})();
}
runGenerator(function *main(){
var result1 = yield request("http://some.url.1");
var data = JSON.parse(result1);
var result2 = yield request("http://some.url.2?id=" + data.id);
var resp = JSON.parse(result2);
console.log("The value you asked for: " + resp.value);
});
sahiptir. Bir jeneratör + vermiştir söz (ler) gerçekten güçlü ve zarif senkronizasyon (görünüyorsun) almak zaman uyumsuz kontrol ifadesi yetenekleri akmaya hem dünyanın en iyi birleştiriyor:
O Basitçe
özetlemektedir. Basit sarıcı yardımcı programları ile ( birçok kütüphane zaten mevcuttur), otomatik olarak jeneratörlerimizi, sane ve sync (manzaralı) hatası kullanımı dahil olmak üzere tamamlamamız için otomatik olarak çalıştırabiliriz!
Örneğiniz sadece bu değil mi? – Xotic750
@ Xotic750 Bir çizgi basmak için böyle bir şeyi asla kodlamamıştım :), böylece iki yönlü jeneratörler diğer mekanizmalardan çok daha uygun olan kullanım durumunu veya desenini anlamaya çalışıyorum. –
Anladığım kadarıyla, çoğunlukla async sorununu ele almak ve Promises ile birleştirmek için kullanılır. Anahtar kelimeyi kullanarak daha fazla arama yapabilirsiniz. –