Olay yayıcılar, NodeJS'de bir eylemin gerçekleştiğine dair 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ı nasıl ele alacağınızı öğreneceksiniz.
Yayılan Olaylar
Olaylar modülü, Node.js sunucu tarafı ortamı. Bu nedenle, yüklemeniz gerekmez, ancak kullanmadan önce Olay Yayıcı sınıf, olaylar modülünden içe aktarmanız ve başlatmanız gerekir.
Şöyle:
sabit EventEmitter = gerekmek("olaylar");
// EventEmitter'ı Başlatmak
sabit benim Yayıcım = yeni EventEmitter();
kullanarak olayları yayınlayabilirsiniz. Olay Yayıcı'S yaymak yöntem. bu yaymak yöntem alır etkinlik adı ve parametre olarak isteğe bağlı sayıda bağımsız değişken.
Bir kez aradığınızda yaymak yöntem, geçenleri yayar etkinlik adı. Ardından, etkinliğin dinleyicilerinin her birini, kaydettiğiniz sırayla eşzamanlı olarak çağırır ve sağlanan bağımsız değişkenleri her birine iletir. Sonunda geri dönüyor
doğru olayın dinleyicileri olsaydı ve YANLIŞ eğer hiç dinleyicisi olmasaydı.Örneğin:
myEmitter.emit("Test Etkinliği", "foo", "çubuk", 1, 2);
Yukarıdaki kod bloğunda geçtiniz Test Etkinliği olarak Etkinlik adı, Ve "aptal,” "çubuk,” 1, Ve 2 argümanlar olarak. Yukarıdaki kod bloğu çalıştığında, onu dinleyen tüm dinleyicilere bildirim gönderecektir. Test Etkinliği etkinlik. Bu dinleyicileri verilen argümanlarla arayacak.
Olayları Dinleme
kullanarak yayılan olayları dinleyebilirsiniz. Olay Yayıcı'S Açık yöntem. bu Açık yöntem alır Etkinlik adı ve parametre olarak bir geri arama işlevi. ile olay ne zaman Etkinlik adı içine geçti Açık yöntem yayınlanır, geri arama işlevini çağırır. Bu yöntem, şuna bir başvuru döndürür: Olay Yayıcı, birden fazla aramayı zincirlemenize olanak tanır.
Örneğin:
// İlk Dinleyici
myEmitter.on("Test Etkinliği", () => {
konsol.log("TestEvent Yayıldı!!!");
}); // TestEvent Yayıldı!!!// İkinci Dinleyici
myEmitter.on("Test Etkinliği", (... args) => {
args = args.join(", ");
konsol.kayıt(`Aşağıdaki bağımsız değişkenlerle yayılan olay: ${argo}`);
}); // Aşağıdaki bağımsız değişkenlerle yayılan olay: foo, bar, 1, 2
myEmitter.emit("Test Etkinliği", "foo", "çubuk", 1, 2);
Yukarıdaki kod bloğunda, Test Etkinliği olay yayılırsa, olayın dinleyicileri geri arama işlevlerini çağırır. Dinleyiciler, onları kaydettiğiniz sırayla tepki verir, yani "ilk dinleyicinin" geri araması ikinciden önce çalışır ve bu böyle devam eder.
kullanarak bu davranışı değiştirebilirsiniz. Olay Yayıcı'S prependListener yöntem. Bu metot ile aynı parametreleri alır. Açık yöntem. Aradaki fark, bu yöntemin, kaydettiğiniz zamandan bağımsız olarak önce olaya tepki vermesidir.
Örneğin:
myEmitter.on("Test Etkinliği", () => {
konsol.log("TestEvent Yayıldı!!!");
});myEmitter.prependListener("Test Etkinliği", () => {
konsol.log("Önce yürütür")
})
// console.log (myEmitter.listeners("Test Etkinliği"));
myEmitter.emit("Test Etkinliği", "foo", "çubuk", 1, 2);
Yukarıdaki kod bloğu yürütüldüğünde, konsola önce "Executes first" kaydedilecek, ardından "TestEvent Ewed!!!" nedeniyle onları kaydettiğiniz siparişten bağımsız olarak prependListener yöntem.
ile birden fazla dinleyici kaydederseniz, prependListener yöntem, sondan birinciye doğru sırayla çalışırlar.
Verici ve dinleyicilerin düzenine dikkat edin. Dinleyiciler her zaman yayıcıdan önce gelir. Bu düzenlemenin nedeni, dinleyicilerin, yayıcı onu yaymadan önce olayı zaten dinliyor olmaları gerektiğidir.
Bağlam için aşağıdaki kod bloğunu göz önünde bulundurun:
myEmitter.emit("Test Etkinliği", "foo", "çubuk", 1, 2);
myEmitter.on("Test Etkinliği", () => {
konsol.log("TestEvent Yayıldı!!!");
});
Yukarıdaki kod bloğunu çalıştırırsanız hiçbir şey olmaz çünkü yayıcı olayı yaydığı sırada hiçbir dinleyici olayı dinlemiyordu.
Olayları Bir Kez Dinleme
Gereksinimlerinize bağlı olarak, uygulamanızın yaşam döngüsünde bazı olayları yalnızca bir kez işlemeniz gerekebilir. kullanarak bunu başarabilirsiniz. Olay Yayıcı'S bir kere yöntem.
Bu metot, aşağıdaki argümanlarla aynı argümanları alır. Açık yöntem ve benzer şekilde çalışır. Tek fark, kayıtlı dinleyicilerin bir kere yöntem olayı yalnızca bir kez dinler.
Örneğin:
myEmitter.once("Tek olay", () => {
konsol.log("Olay bir kez işlendi");
});
myEmitter.emit("Tek olay"); // Olay bir kez işlendi
myEmitter.emit("Tek olay"); // Yok sayıldı
myEmitter.emit("Tek olay"); // Yok sayıldı
Kod bloğunun çalıştırılması, yayıcının olayı ne sıklıkta yaydığına bakılmaksızın, "Olay bir kez işlendi" ifadesini konsola yalnızca bir kez kaydeder.
Kayıtlı dinleyiciler bir kere yöntem, onları kaydettiğiniz sırayla olaya tepki verir. kullanarak bu davranışı değiştirebilirsiniz. başa ekleOnceListener gibi çalışan bir yöntem prependListener. Tek fark, kayıtlı dinleyicilerin bir kere yöntem olayı yalnızca bir kez dinler.
Olay Yayıcılarla Hataları İşleme
dikkat etmelisin JavaScript hatalarını uygun şekilde işleyin ve olay dinleyicileri de istisna değildir. Bunlardan işlenmeyen hatalar, Node.js işleminin kapanmasına ve uygulamanızın çökmesine neden olur.
Bir hata olayını işlemek için, olayın dinleyicilerinden en az birinin kendi Etkinlik adı ayarlanır hata.
Örneğin:
myEmitter.on("hata", (hata) => {
konsol.hata(`Hata: ${hata}`);
});
Yukarıdaki kod bloğunda olduğu gibi olası bir hatayı işleyen bir dinleyiciye sahip olmak, bir hata oluştuğunda uygulamanın çökmesini durduracaktır.
Örneğin:
myEmitter.emit("hata", yeni Hata("Bu bir hata"));
Yukarıdaki kod bloğunun çalıştırılması, bir dinleyici hata olaylarını işlediğinden konsola "Bu bir hatadır" günlüğünü açacaktır.
Olay Dinleyicilerini Yönetme
bu Olay Yayıcı class, olay dinleyicilerini değiştirmenize 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ı ayarlayabilirsiniz.
İşte içeren bir tablo Olay Yayıcı Etkinlik dinleyicilerini aşağıdakilerle değiştirebileceğiniz yöntemler:
Yöntem | Argümanlar | Geri dönüş değeri |
---|---|---|
dinleyici Sayısı | etkinlik adı | Bir etkinliğe abone olan dinleyici sayısını döndürür |
dinleyiciler | etkinlik adı | Bir dizi dinleyici döndürür |
kaldırDinleyici | etkinlik adı | Belirtilen bir eventName'den en az bir dinleyiciyi kaldırır. |
Tüm Dinleyicileri kaldır | etkinlik adı | Belirli 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. |
setMaxListeners | sayı | Olay başına varsayılan maksimum dinleyici sayısını değiştirir. Sınırsız sayıda dinleyiciyi belirtmek için sonsuzluk veya sıfır kullanın. Varsayılan olarak, bir etkinliğe yalnızca on dinleyici abone olabilirsiniz. |
Bu yöntemleri yalnızca bir Olay Yayıcı misal.
Örneğin:
myEmitter.removeListener("Test Etkinliği");
Yukarıdaki kod bloğu, tek bir dinleyiciyi kaldırır. Test Etkinliği etkinlik.
Olay Yayıcıların Önemi
Node.js, olay yayıcılar ve dinleyiciler için verdiği destekle olay güdümlü programlama paradigmasını benimser. Olay güdümlü programlama, Node.js programlarının bazı alternatiflere göre daha hızlı ve daha anlaşılır olmasının nedenlerinden biridir. Birden çok olayı kolayca senkronize ederek verimliliği artırabilirsiniz.