Node.js Sözü Eğiticisi

İçindekiler:

Anonim

Önceki eğitimlerde, Eşzamansız olaylar için kullanılan geri arama işlevlerini görmüştünüz. Ancak bazen geri arama işlevleri iç içe geçmeye başladıklarında kabusa dönüşebilir ve program uzun ve karmaşık hale gelmeye başlar.

Bu eğitimde öğreneceksiniz-

  • Sözler nelerdir?
  • Sözlerin geri aranması
  • İç içe geçmiş vaatlerle başa çıkmak
  • Özel bir söz yaratmak

Sözler nelerdir?

Sözlere başlamadan önce, ilk olarak Node.js'deki "geri çağırma" işlevlerinin ne olduğunu gözden geçirelim. Bu geri arama işlevlerini önceki bölümlerde çok görmüştük, o yüzden hızlı bir şekilde bunlardan birine geçelim.

Aşağıdaki örnek, MongoDB veritabanına bağlanmak ve veritabanındaki kayıtlardan birinde güncelleme işlemi gerçekleştirmek için kullanılan bir kod parçacığını göstermektedir.

  1. Yukarıdaki kodda, işlevin parçası (err, db), anonim veya geri arama işlevinin bildirimi olarak bilinir. MongoClient, MongoDB veri tabanına bir bağlantı oluşturduğunda, bağlantı işlemi tamamlandığında geri arama işlevine dönecektir. Yani bir anlamda bağlantı işlemleri arka planda gerçekleşir ve tamamlandığında geri arama fonksiyonumuzu çağırır. Bunun, birçok işlemin eşzamanlı olarak gerçekleşmesine izin veren ve dolayısıyla herhangi bir kullanıcının bir işlemi gerçekleştirmesini engellemeyen Node.js'nin kilit noktalarından biri olduğunu unutmayın.

  2. İkinci kod bloğu, geri çağırma işlevi gerçekten çağrıldığında çalıştırılan şeydir. Geri arama işlevi, MongoDB veritabanımızdaki bir kaydı günceller.

Öyleyse söz nedir? Vaat, Node.js'deki geri çağırma işlevlerinde yapılan bir geliştirmedir. Geliştirme yaşam döngüsü sırasında, birden çok geri arama işlevini iç içe yerleştirmeniz gereken bir örnek olabilir. Bu, zaman içinde belirli bir noktada biraz dağınık ve bakımı zor hale gelebilir. Kısacası, söz, bu sorunları hafifletmeye yönelik geri aramalara yönelik bir geliştirmedir.

Bir sözün temel sözdizimi aşağıda gösterilmiştir;

var promise = doSomethingAync()promise.then(onFulfilled, onRejected)
  • "doSomethingAync", bir tür işleme yapan herhangi bir geri çağırma veya eşzamansız işlevdir.
  • Bu sefer geri aramayı tanımlarken, "söz" denen döndürülen bir değer vardır.
  • Bir söz iade edildiğinde 2 çıktı alabilir. Bu, 'then cümlesi' ile tanımlanır. Her iki işlem de 'onFulfilled' parametresi ile gösterilen başarılı olabilir. Veya 'onRejected' parametresi ile gösterilen bir hata olabilir.

Not: Yani bir sözün anahtar yönü geri dönüş değeridir. Node.js'de normal geri aramalarla çalışırken bir dönüş değeri kavramı yoktur. Dönüş değeri nedeniyle, geri arama işlevinin nasıl tanımlanabileceği konusunda daha fazla kontrole sahibiz.

Bir sonraki başlıkta, sözlerin bir örneğini ve geri aramalardan nasıl faydalandıklarını göreceğiz.

Sözlerin geri aranması

Şimdi bir Node.js uygulaması içinden "vaatleri" nasıl kullanabileceğimize dair bir örneğe bakalım. Bir Node.js uygulamasında vaatleri kullanmak için, önce 'vaat' modülünün indirilmesi ve kurulması gerekir.

Daha sonra, aşağıda gösterildiği gibi, vaatleri kullanarak 'Çalışan' koleksiyonundaki bir Çalışan adını güncelleyen kodumuzu değiştireceğiz.

Adım 1) NPM Modüllerini Takma

Promises'i bir Node JS uygulamasından kullanmak için promise modülü gereklidir. Söz modülünü kurmak için aşağıdaki komutu çalıştırın

npm yükleme sözü

Adım 2) Kodu vaatleri içerecek şekilde değiştirin

var Promise = require('promise');var MongoClient = require('mongodb').MongoClient;var url = 'mongodb://localhost/EmployeeDB';MongoClient.connect(url).then(function(err, db) {db.collection('Employee').updateOne({"EmployeeName": "Martin"}, {$set: {"EmployeeName": "Mohan"}});});

Kod Açıklaması: -

  1. İlk bölüm, kodumuzdaki vaat işlevselliğini kullanmamıza izin verecek 'vaat' modülünü dahil etmektir.
  2. Şimdi MongoClient.connect fonksiyonumuza 'sonra' fonksiyonunu ekleyebiliriz. Yani bunun yaptığı şey, veritabanına bağlantı kurulduğunda, bundan sonra tanımlanan kod parçacığını yürütmemiz gerektiğidir.
  3. Son olarak, çalışanın EmployeeName'inin "Martin" adıyla "Mohan" olarak güncellenmesi işini yapan kod parçacığımızı tanımlıyoruz.

Not:-

MongoDB veritabanınızın içeriğini şimdi kontrol ederseniz, EmployeeName "Martin" olan bir kayıt varsa, "Mohan" olarak güncelleneceğini göreceksiniz.

Verilerin veri tabanına düzgün bir şekilde eklenip eklenmediğini kontrol etmek için MongoDB'de aşağıdaki komutları uygulamanız gerekir.

  1. EmployeeDB'yi kullanın
  2. db.Employee.find ({EmployeeName: Mohan})

İlk ifade EmployeeDb veritabanına bağlı olmanızı sağlar. İkinci ifade, çalışan adı "Mohan" olan kaydı arar.

İç içe geçmiş vaatlerle başa çıkmak

Sözleri tanımlarken, "o zaman" yönteminin kendisinin bir söz verdiğine dikkat edilmelidir. Yani bir anlamda vaatler iç içe geçebilir veya birbirine zincirlenebilir.

Aşağıdaki örnekte, her ikisi de MongoDB veritabanına bir kayıt ekleyen 2 geri arama işlevi tanımlamak için zincirleme kullanıyoruz.

( Not : Zincirleme, yöntemlerin yürütülmesini birbirine bağlamak için kullanılan bir kavramdır. Uygulamanızın 'yöntemA' ve 'yöntemB' olarak adlandırılan 2 yöntemi olduğunu varsayalım. Ve mantık, 'yöntemB'nin' yöntemA'dan sonra çağrılması gereken bir mantıktı. o zaman yürütmeyi, 'yöntem B'nin' yöntemA'dan sonra doğrudan çağrılacağı şekilde zincirlersiniz.)

Bu örnekte dikkat edilmesi gereken en önemli nokta, kodun iç içe geçmiş vaatler kullanılarak daha temiz, okunabilir ve sürdürülebilir hale gelmesidir.

var Promise = require('promise');var MongoClient = require('mongodb').MongoClient;var url = 'mongodb://localhost/EmployeeDB';MongoClient.connect(url).then(function(db) {db.collection('Employee').insertOne({Employeeid: 4,EmployeeName: "NewEmployee"}).then(function(db1) {db1.collection('Employee').insertOne({Employeeid: 5,EmployeeName: "NewEmployee1"})})});

Kod Açıklaması: -

  1. Şimdi birbiri ardına çalıştırılan 2 "then" cümlesini tanımlıyoruz. First then cümlesinde, veritabanı bağlantımızı içeren 'db' parametresini geçiyoruz. Ardından, kayıtları 'Çalışan' koleksiyonuna eklemek için 'db' bağlantısının koleksiyon özelliğini kullanıyoruz. Gerçek belgeyi Employee koleksiyonuna eklemek için 'insertOne' yöntemi kullanılır.
  2. Daha sonra veritabanına başka bir kayıt eklemek için 2 nd then cümlesini kullanıyoruz .

Şimdi MongoDB veri tabanınızın içeriğini kontrol ederseniz, 2 kaydın MongoDB veri tabanına eklendiğini göreceksiniz.

Özel bir söz yaratmak

'Q' adlı bir düğüm modülü kullanılarak özel bir söz oluşturulabilir. 'Q' kitaplığının, düğüm paketi yöneticisi kullanılarak indirilmesi ve kurulması gerekir. 'Q' kitaplığını kullandıktan sonra, herhangi bir işlevin bir vaat döndüren bir işlev olmasına neden olacak "denodeify" yöntemi çağrılabilir.

Aşağıdaki örnekte, 2 sayı ekleyecek "Ekle" adlı basit bir işlev oluşturacağız. Bir söz vermek için bu işlevi bir işleve dönüştüreceğiz.

Bu yapıldıktan sonra, console.log dosyasında bir mesaj görüntülemek için Add fonksiyonu tarafından döndürülen sözü kullanacağız.

Bir söz vermek üzere özel işlevimizi oluşturmak için aşağıdaki adımları takip edelim.

Adım 1) NPM Modüllerini Takma

Bir Node JS uygulamasından 'q' kullanmak için, 'q' modülü gereklidir. 'Q' modülünü kurmak için aşağıdaki komutu çalıştırın

npm yükle q

Adım 2) Özel taahhüt oluşturmak için kullanılacak aşağıdaki kodu tanımlayın.

Kod Açıklaması: -

  1. İlk bit, require anahtar sözcüğünü kullanarak 'q' kitaplığını dahil etmektir. Bu kitaplığı kullanarak, bir geri arama döndürmek için herhangi bir işlevi tanımlayabileceğiz.
  2. A ve b değişkenlerinde tanımlanan 2 sayıyı ekleyecek Add adında bir fonksiyon oluşturuyoruz. Bu değerlerin toplamı c değişkeninde saklanacaktır.
  3. Daha sonra, Add işlevimizi (herhangi bir işlevi bir söz döndüren bir işleve dönüştürmek için kullanılan yöntem) veya başka bir şekilde Add işlevimizi bir söz döndüren bir işleve dönüştürmek için q kitaplığını kullanıyoruz.
  4. Şimdi "Add" fonksiyonumuzu çağırıyoruz ve Add fonksiyonunu denodeify etmek için gerçekleştirdiğimiz önceki adımdan dolayı bir iade vaadi değeri elde edebiliyoruz.
  5. 'Then' anahtar sözcüğü, işlevin başarılı bir şekilde yürütülmesi durumunda, console.log dosyasında "Ekleme işlevi tamamlandı" dizesinin görüntüleneceğini belirtir.

Yukarıdaki kod çalıştırıldığında, aşağıda gösterildiği gibi console.log'da "Ekleme işlevi tamamlandı" çıktısı görüntülenecektir.

Özet

  • Node.js'de geri arama işlevlerini kullanmanın dezavantajları vardır. Bazen geliştirme sürecinde, geri arama işlevlerinin iç içe kullanımı, kodu daha karmaşık hale getirebilir ve bakımını zorlaştırabilir.
  • İç içe geçmiş geri arama işlevleriyle ilgili sorunların çoğu, node.js'de vaatler ve oluşturucular kullanılarak hafifletilebilir.
  • Promise, zaman uyumsuz işlev tarafından gerçekleştirilen işlemin tamamlandığını belirtmek için eşzamansız işlev tarafından döndürülen bir değerdir.
  • Eşzamansız bir işlevin başka bir eşzamansız işlevden sonra çağrılması gerektiğinde, kodun daha iyi ve daha kolay görünmesini sağlamak için sözler birbirinin içine yerleştirilebilir.