Koa.js - Jeneratörler

JavaScript ES6'nın en heyecan verici yeni özelliklerinden biri, jeneratör adı verilen yeni bir işlev türüdür. Jeneratörlerden önce, kodun yürütülmesini durdurmanın ve daha sonra aynı yığınla devam etmenin kolay bir yolu olmadan, genellikle yukarıdan aşağıya sırayla yürütmek için tüm komut dosyası kullanılırdı. Jeneratörler, çıkılabilen ve daha sonra yeniden girilebilen işlevlerdir. Bağlamları (değişken bağlar) yeniden girişler arasında kaydedilecektir.

Jeneratörler, arada kod yürütmeyi durdurmamıza izin verir. Bu nedenle, basit bir jeneratöre bir göz atalım.

var generator_func = function* (){
   yield 1;
   yield 2;
};

var itr = generator_func();
console.log(itr.next());
console.log(itr.next());
console.log(itr.next());

Yukarıdaki kodu çalıştırırken, aşağıdaki sonuç olacaktır.

{ value: 1, done: false }
{ value: 2, done: false }
{ value: undefined, done: true }

Yukarıdaki kodun içine bakalım. Önce adında bir jeneratör oluşturuyoruzgenerator_func(). Bu tuhaf görünümlü işlevin bir örneğini oluşturduk ve bunuitr. Sonra aramaya başladıknext() bu itr değişkeninde.

Next () çağrısı oluşturucuyu başlatır ve bir verime ulaşana kadar çalışır. Ardından değeri olan nesneyi döndürür ve yapılır, burada değer ifade değerine sahiptir. Bu ifade herhangi bir şey olabilir. Bu noktada, yürütmeyi durdurur. Yine bu fonksiyonu (sonraki) çağırdığımızda, jeneratör, son verim noktasından sonraki verim noktasına kadar durma anında aynı olan fonksiyon durumu ile yürütmeye devam eder. Bu, kodda daha fazla verim puanı kalmayana kadar yapılır.

Koa'daki Jeneratörler

Öyleyse neden bu eğitimde jeneratörleri tartışıyoruz. Merhaba dünya programından hatırlayabileceğiniz gibi,function* ()app.use () öğesine geri çağrıyı iletmek için notasyon. Koa, her biri istendiğinde yığın benzeri bir şekilde oluşturulan ve çalıştırılan bir dizi ara katman oluşturucu işlevi içeren bir nesnedir. Koa ayrıca aşağı akış ve ardından kontrol akışının yukarı akışını uygular.

Bunu daha iyi anlamak için aşağıdaki örneğe bir göz atın.

var koa = require('koa');
var app = koa();
 
app.use(function* (next) {
   //do something before yielding to next generator function 
   
   //in line which will be 1st event in downstream
   console.log("1");
   yield next;
 
   //do something when the execution returns upstream, 
   //this will be last event in upstream
   console.log("2");
});
app.use(function* (next) {
   // This shall be 2nd event downstream
   console.log("3");
   yield next;
 
   // This would be 2nd event upstream
   console.log("4");
});
app.use(function* () { 
   // Here it would be last function downstream
   console.log("5");
   
   // Set response body
   this.body = "Hello Generators";

   // First event of upstream (from the last to first)
   console.log("6");
});

app.listen(3000);

Yukarıdaki kodu çalıştırırken ve şuraya giderken https://localhost:3000/ Konsolumuzda aşağıdaki çıktıyı alıyoruz.

1
3
5
6
4
2

Bu aslında Koa'nın jeneratörleri nasıl kullandığıdır. Bu özelliği kullanarak kompakt ara yazılım oluşturmamıza ve hem yukarı akış hem de aşağı akış işlevleri için kod yazmamıza olanak tanır, böylece bizi geri aramalardan kurtarır.