Arka uç JavaScript kodunuzu verimli bir şekilde düzenlemek için kendi özel etkinliklerinizi oluşturun ve yönetin.
Olay yayıcıları, NodeJS’de bir eylemin gerçekleştiğini belirten bir mesaj göndererek olayları tetikleyen nesnelerdir.
Node.js, yerleşik bir olay modülü sağlar. Geri arama işlevleri aracılığıyla özel olaylar oluşturmanıza ve işlemenize olanak tanıyan bir olay yayıcı sınıfı içerir.
Burada, NodeJS’de olayları yaymayı, olay verilerini dinlemeyi ve işlemeyi ve olay hatalarını işlemeyi öğreneceksiniz.
Olay Yayan
Olaylar modülü, Node.js sunucu tarafı ortamının temel bir parçasıdır . Bu nedenle, onu yüklemeniz gerekmez, ancak EventEmitter sınıfını kullanmadan önce, olaylar modülünden içe aktarmanız ve onu somutlaştırmanız gerekir.
Şöyle:
const EventEmitter = require(“events”);
// Instantiatating the EventEmitter
const myEmitter = new EventEmitter();
EventEmitter’ın emit yöntemini kullanarak olayları yayabilirsiniz . emit yöntemi, parametre olarak bir eventName ve rasgele sayıda argüman alır.
Yayma yöntemini çağırdığınızda , iletilen eventName öğesini yayar . Ardından, sağlanan bağımsız değişkenleri her birine ileterek, olay dinleyicilerinin her birini kaydettiğiniz sırayla eşzamanlı olarak çağırır. Son olarak, olayın dinleyicileri varsa true , dinleyicileri yoksa false döndürür .
Örneğin:
myEmitter.emit(“TestEvent”, “foo”, “bar”, 1, 2);
Yukarıdaki kod bloğunda , EventName olarak TestEvent’i ve bağımsız değişkenler olarak “foo ”, “bar ”, 1 ve 2’yi geçtiniz . Yukarıdaki kod bloğu çalıştığında, TestEvent olayını dinleyen tüm dinleyicileri bilgilendirecektir. Bu dinleyicileri verilen argümanlarla arayacaktır.
Etkinlikleri Dinleme
EventEmitter’ın on yöntemini kullanarak yayılan olayları dinleyebilirsiniz . on yöntemi, parametre olarak bir EventName ve bir geri arama işlevi alır . On yöntemine geçirilen EventName ile olay yayınlandığında, geri çağırma işlevini çağırır. Bu yöntem , birden çok çağrıyı zincirlemenize olanak tanıyan EventEmitter öğesine bir başvuru döndürür .
Örneğin:
// First Listener
myEmitter.on(“TestEvent”, () => {
console.log(“TestEvent Emitted!!!”);
}); // TestEvent Emitted!!!
// Second Listener
myEmitter.on(“TestEvent”, (…args) => {
args = args.join(“, “);
console.log(`Event emitted with the following arguments: ${args}`);
}); // Event emitted with the following arguments: foo, bar, 1, 2
myEmitter.emit(“TestEvent”, “foo”, “bar”, 1, 2);
Yukarıdaki kod bloğunda, TestEvent olayı yayınlandığında, olayın dinleyicileri geri arama işlevlerini çağıracaktır. Dinleyiciler, onları kaydettiğiniz sırayla tepki verir, yani “ilk dinleyicinin” geri araması ikinciden önce çalışır ve bu böyle devam eder.
EventEmitter’ın prependListener yöntemini kullanarak bu davranışı değiştirebilirsiniz . Bu yöntem, on yöntemiyle aynı parametreleri alır . Aradaki fark, bu yöntemin, kaydettiğiniz zamandan bağımsız olarak olaya önce tepki vermesidir.
Örneğin:
myEmitter.on(“TestEvent”, () => {
console.log(“TestEvent Emitted!!!”);
});
myEmitter.prependListener(“TestEvent”, () => {
console.log(“Executes first”)
})
// console.log(myEmitter.listeners(“TestEvent”));
myEmitter.emit(“TestEvent”, “foo”, “bar”, 1, 2);
Yukarıdaki kod bloğu yürütüldüğünde, konsola önce “Executes first”, ardından “TestEvent Emited!!!” kaydedilir. prependListener yöntemi nedeniyle bunları kaydettiğiniz sıraya bakılmaksızın .
prependListener yöntemiyle birkaç dinleyici kaydederseniz , bunlar sondan ilke doğru sırayla çalışır.
Verici ve dinleyicilerin düzenine dikkat edin. Dinleyiciler her zaman yayıcıdan önce gelir. Bu düzenleme, dinleyicilerin, yayıcı yayınlamadan önce olayı zaten dinliyor olmaları gerektiği içindir.
Bağlam için aşağıdaki kod bloğunu göz önünde bulundurun:
myEmitter.emit(“TestEvent”, “foo”, “bar”, 1, 2);
myEmitter.on(“TestEvent”, () => {
console.log(“TestEvent Emitted!!!”);
});
Yukarıdaki kod bloğunu çalıştırırsanız hiçbir şey olmaz çünkü verici olayı yayınladığı sırada olayı dinleyen hiç kimse yoktur.
Olayları Bir Kez Dinlemek
Gereksinimlerinize bağlı olarak, uygulamanızın yaşam döngüsünde bazı olayları yalnızca bir kez ele almanız gerekebilir. Bunu EventEmitter’ın once yöntemini kullanarak başarabilirsiniz .
Bu yöntem, on yöntemiyle aynı argümanları alır ve benzer şekilde çalışır. Tek fark, bir kez yöntemiyle kaydedilen dinleyicilerin olayı yalnızca bir kez dinlemesidir.
Örneğin:
myEmitter.once(“SingleEvent”, () => {
console.log(“Event handled once”);
});
myEmitter.emit(“SingleEvent”); // Event handled once
myEmitter.emit(“SingleEvent”); // Ignored
myEmitter.emit(“SingleEvent”); // Ignored
Kod bloğunu çalıştırmak, emitörün olayı ne sıklıkta yaydığına bakılmaksızın, “Bir kez işlenen Olay”ı konsola yalnızca bir kez kaydeder.
Once yöntemiyle kaydedilen dinleyiciler, onları kaydettiğiniz sırayla olaya tepki verir. Bu davranışı, prependListener gibi çalışan prependOnceListener yöntemini kullanarak değiştirebilirsiniz . Tek fark, bir kez yöntemiyle kaydedilen dinleyicilerin olayı yalnızca bir kez dinlemesidir.
Olay Yayıcılarla Hataları İşleme
JavaScript hatalarını uygun şekilde işlemeye özen göstermelisiniz ve olay dinleyicileri istisna değildir. Onlardan kaynaklanan işlenmeyen hatalar, Node.js işleminin çıkmasına ve uygulamanızın çökmesine neden olur.
Bir hata olayını işlemek için, olay dinleyicilerinden en az birinin EventName öğesinin error olarak ayarlanmış olması gerekir .
Örneğin:
myEmitter.on(“error”, (error) => {
console.error(`Error: ${error}`);
});
Bir dinleyicinin olası bir hatayı işlemesi, yukarıdaki kod bloğunda olduğu gibi, bir hata oluştuğunda uygulamanın çökmesini durduracaktır.
Örneğin:
myEmitter.emit(“error”, new Error(“This is an error”));
Yukarıdaki kod bloğunu çalıştırmak, bir dinleyici hata olaylarını işlediği için konsola “Bu bir hatadır” yazacaktır.
Olay Dinleyicilerini Yönetme
EventEmitter sınıfı, olay dinleyicilerini manipüle etmenize ve yönetmenize izin veren çeşitli yöntemlere sahiptir . Bir etkinliğin dinleyicilerini alabilir, kaldırabilir ve bir etkinlik için maksimum dinleyici sayısını belirleyebilirsiniz.
Olay dinleyicilerini şu şekilde değiştirebileceğiniz EventEmitter yöntemlerini içeren bir tablo :
- Yöntem Argümanlar Geri dönüş değeri
- dinleyiciCount etkinlik ismi Bir etkinliğe abone olan dinleyici sayısını döndürür
- dinleyiciler etkinlik ismi Bir dizi dinleyici döndürür
- KaldırDinleyici etkinlik ismi Belirtilen bir eventName öğesinden en az bir dinleyiciyi kaldırır.
- Tüm Dinleyicileri kaldır etkinlik ismi Belirtilen bir eventName için tüm dinleyicileri kaldırır. Bir olay adı belirtmezseniz, bu yöntem çağrısı EventEmitter için tüm dinleyicileri kaldıracaktır.
- setMaxDinleyiciler sayı Etkinlik başına varsayılan maksimum dinleyici sayısını değiştirir. Sınırsız sayıda dinleyici belirtmek için sonsuz veya sıfır kullanın. Varsayılan olarak, bir etkinliğe yalnızca on dinleyici abone olabilirsiniz.
- Bu yöntemleri yalnızca bir EventEmitter örneğinde çağırabilirsiniz.
Örneğin:
myEmitter.removeListener(“TestEvent”);
Yukarıdaki kod bloğu, TestEvent olayı için tek bir dinleyiciyi kaldırır.
Olay Yayıcıların Önemi
Node.js, olay yayıcılar ve dinleyiciler için desteğiyle olay odaklı programlama paradigmasını benimser. Olaya dayalı programlama, Node.js programlarının bazı alternatiflerden daha hızlı ve daha basit olmasının nedenlerinden biridir. Birden fazla olayı kolayca senkronize edebilir, bu da verimliliğin artmasını sağlar.