Οι εκπομποί συμβάντων είναι αντικείμενα στο NodeJS που ενεργοποιούν συμβάντα στέλνοντας ένα μήνυμα για να σηματοδοτήσουν ότι έχει συμβεί μια ενέργεια.

Το Node.js παρέχει μια ενσωματωμένη λειτουργική μονάδα συμβάντων. Περιέχει μια κλάση εκπομπής συμβάντων που σας επιτρέπει να δημιουργείτε και να χειρίζεστε προσαρμοσμένα συμβάντα μέσω λειτουργιών επανάκλησης.

Εδώ θα μάθετε πώς να εκπέμπετε συμβάντα, να ακούτε και να χειρίζεστε δεδομένα συμβάντων και να χειρίζεστε σφάλματα συμβάντων στο NodeJS.

Εκπομπή Γεγονότων

Η ενότητα εκδηλώσεων αποτελεί βασικό μέρος της το περιβάλλον του διακομιστή Node.js. Επομένως, δεν χρειάζεται να το εγκαταστήσετε, αλλά πριν χρησιμοποιήσετε το EventEmitter class, πρέπει να εισαγάγετε από τη λειτουργική μονάδα συμβάντων και να την δημιουργήσετε.

Όπως έτσι:

συνθ Εκπομπός συμβάντων = απαιτώ("γεγονότα");

// Στιγμιότυπο του EventEmitter
συνθ myEmitter = νέος EventEmitter();

Μπορείτε να εκπέμψετε συμβάντα χρησιμοποιώντας το EventEmitter'μικρό εκπέμπουν μέθοδος. ο εκπέμπουν μέθοδος παίρνει ένα Όνομα συμβάντος και έναν αυθαίρετο αριθμό ορισμάτων ως παραμέτρους.

instagram viewer

Μόλις καλέσετε το εκπέμπουν μέθοδος, εκπέμπει το περασμένο Όνομα συμβάντος. Στη συνέχεια, καλεί συγχρονισμένα κάθε έναν από τους ακροατές του συμβάντος με τη σειρά που τους καταχωρίσατε, μεταβιβάζοντας τα παρεχόμενα ορίσματα στον καθένα. Τελικά, επιστρέφει αληθής αν η εκδήλωση είχε ακροατές και ψευδής αν δεν είχε ακροατές.

Για παράδειγμα:

myEmitter.emit("TestEvent", "foo", "μπαρ", 1, 2);

Στο μπλοκ κώδικα παραπάνω, περάσατε TestEvent ως το Όνομα συμβάντος, και "φου,” "μπαρ,” 1, και 2 ως τα επιχειρήματα. Όταν εκτελείται το παραπάνω μπλοκ κώδικα, θα ειδοποιήσει όλους τους ακροατές που ακούν το TestEvent Εκδήλωση. Θα καλέσει αυτούς τους ακροατές με τα δεδομένα επιχειρήματα.

Ακρόαση για εκδηλώσεις

Μπορείτε να ακούσετε συμβάντα που εκπέμπονται χρησιμοποιώντας το EventEmitter'μικρό επί μέθοδος. ο επί μέθοδος παίρνει ένα Όνομα συμβάντος και μια λειτουργία επανάκλησης ως παράμετροι. Όταν η εκδήλωση με το Όνομα συμβάντος πέρασε στο επί μέθοδος εκπέμπεται, καλεί τη λειτουργία επανάκλησής της. Αυτή η μέθοδος επιστρέφει μια αναφορά στο EventEmitter, επιτρέποντάς σας να συνδέσετε πολλές κλήσεις.

Για παράδειγμα:

// Πρώτος ακροατής
myEmitter.on("TestEvent", () => {
console.log("Εκδόθηκε TestEvent!!!");
}); // Εκδόθηκε TestEvent!!!

// Δεύτερος ακροατής
myEmitter.on("TestEvent", (...args) => {
args = args.join(", ");
κονσόλα.κούτσουρο(`Συμβάν που εκπέμπεται με τα ακόλουθα ορίσματα: ${args}`);
}); // Συμβάν που εκπέμπεται με τα ακόλουθα ορίσματα: foo, bar, 1, 2

myEmitter.emit("TestEvent", "foo", "μπαρ", 1, 2);

Στο μπλοκ κώδικα παραπάνω, όταν το TestEvent εκπέμπει συμβάν, οι ακροατές για το συμβάν θα καλέσουν τις λειτουργίες επανάκλησής τους. Οι ακροατές θα αντιδράσουν με τη σειρά που τους καταχωρίσατε, πράγμα που σημαίνει ότι η επανάκληση του "πρώτου ακροατή" θα εκτελεστεί πριν από τη δεύτερη και ούτω καθεξής.

Μπορείτε να αλλάξετε αυτήν τη συμπεριφορά χρησιμοποιώντας το EventEmitter'μικρό prependListener μέθοδος. Αυτή η μέθοδος παίρνει τις ίδιες παραμέτρους με το επί μέθοδος. Η διαφορά είναι ότι αυτή η μέθοδος αντιδρά πρώτα στο συμβάν, ανεξάρτητα από τη στιγμή που θα το καταχωρήσετε.

Για παράδειγμα:

myEmitter.on("TestEvent", () => {
console.log("Εκδόθηκε TestEvent!!!");
});

myEmitter.prependListener("TestEvent", () => {
console.log("Εκτελεί πρώτος")
})

// console.log (myEmitter.listeners("TestEvent"));
myEmitter.emit("TestEvent", "foo", "μπαρ", 1, 2);

Όταν εκτελείται το μπλοκ κώδικα παραπάνω, το "Executes first" θα καταγραφεί πρώτα στην κονσόλα, ακολουθούμενο από το "TestEvent Emitted!!!" ανεξάρτητα από τη σειρά στην οποία τα καταχωρίσατε λόγω του prependListener μέθοδος.

Εάν εγγράψετε πολλούς ακροατές στο prependListener μέθοδο, θα τρέξουν με τη σειρά από το τελευταίο στο πρώτο.

Σημειώστε τη διάταξη του πομπού και των ακροατών. Οι ακροατές έρχονται πάντα πριν από τον πομπό. Αυτή η ρύθμιση οφείλεται στο ότι οι ακροατές πρέπει ήδη να ακούν το συμβάν προτού το εκπέμψει ο πομπός.

Για το πλαίσιο, εξετάστε το μπλοκ κώδικα παρακάτω:

myEmitter.emit("TestEvent", "foo", "μπαρ", 1, 2);

myEmitter.on("TestEvent", () => {
console.log("Εκδόθηκε TestEvent!!!");
});

Εάν εκτελέσετε το μπλοκ κώδικα παραπάνω, δεν συμβαίνει τίποτα επειδή, τη στιγμή που ο πομπός εξέπεμψε το συμβάν, κανένας ακροατής δεν άκουγε το συμβάν.

Ακρόαση για εκδηλώσεις μία φορά

Ανάλογα με τις απαιτήσεις σας, μπορεί να χρειαστεί να χειριστείτε ορισμένα συμβάντα μόνο μία φορά στον κύκλο ζωής της εφαρμογής σας. Μπορείτε να το πετύχετε χρησιμοποιώντας το EventEmitter'μικρό μια φορά μέθοδος.

Αυτή η μέθοδος παίρνει τα ίδια ορίσματα με το επί μέθοδο και λειτουργεί παρόμοια. Η μόνη διαφορά είναι ότι οι ακροατές εγγράφηκαν στο μια φορά μέθοδος ακρόασης του συμβάντος μόνο μία φορά.

Για παράδειγμα:

myEmitter.once("SingleEvent", () => {
console.log("Το συμβάν διεκπεραιώθηκε μία φορά");
});

myEmitter.emit("SingleEvent"); // Ο χειρισμός του συμβάντος έγινε μία φορά
myEmitter.emit("SingleEvent"); // Αγνοήθηκε
myEmitter.emit("SingleEvent"); // Αγνοήθηκε

Η εκτέλεση του μπλοκ κώδικα θα καταγράψει μόνο μία φορά το "Event handled one" στην κονσόλα, ανεξάρτητα από το πόσο συχνά ο εκπομπός εκπέμπει το συμβάν.

Ακροατές εγγεγραμμένοι στο μια φορά μέθοδος αντιδρούν στο συμβάν με τη σειρά που τα καταχωρείτε. Μπορείτε να αλλάξετε αυτήν τη συμπεριφορά χρησιμοποιώντας το prependOnceListener μέθοδο, η οποία λειτουργεί όπως prependListener. Η μόνη διαφορά είναι ότι οι ακροατές εγγράφηκαν στο μια φορά μέθοδος ακρόασης του συμβάντος μόνο μία φορά.

Χειρισμός σφαλμάτων με εκπομπούς συμβάντων

Θα πρέπει να φροντίσετε χειριστεί σωστά τα σφάλματα JavaScript και οι ακροατές εκδηλώσεων δεν αποτελούν εξαίρεση. Τα ανεξέλεγκτα σφάλματα από αυτά θα έχουν ως αποτέλεσμα την έξοδο της διαδικασίας Node.js και τη διακοπή λειτουργίας της εφαρμογής σας.

Για να χειριστεί ένα συμβάν σφάλματος, τουλάχιστον ένας από τους ακροατές του συμβάντος πρέπει να το έχει Όνομα συμβάντος οριστεί σε λάθος.

Για παράδειγμα:

myEmitter.on("λάθος", (σφάλμα) => {
κονσόλα.λάθος(`Σφάλμα: ${λάθος}`);
});

Εάν ένας ακροατής χειριστεί ένα πιθανό σφάλμα, όπως στο μπλοκ κώδικα παραπάνω, θα σταματήσει η κατάρρευση της εφαρμογής όταν παρουσιαστεί ένα σφάλμα.

Για παράδειγμα:

myEmitter.emit("λάθος", νέο σφάλμα("Αυτό είναι σφάλμα"));

Η εκτέλεση του μπλοκ κώδικα παραπάνω θα καταγράψει το "Αυτό είναι σφάλμα" στην κονσόλα επειδή ένας ακροατής χειρίζεται συμβάντα σφάλματος.

Διαχείριση Ακροατών Εκδηλώσεων

ο EventEmitter Η class έχει πολλές μεθόδους που σας επιτρέπουν να χειρίζεστε και να διαχειρίζεστε τους ακροατές συμβάντων. Μπορείτε να λάβετε τους ακροατές ενός συμβάντος, να τους αφαιρέσετε και να ορίσετε τον μέγιστο αριθμό ακροατών για ένα συμβάν.

Εδώ είναι ένας πίνακας που περιέχει EventEmitter μεθόδους με τις οποίες μπορείτε να χειριστείτε τους ακροατές συμβάντων:

Μέθοδος Επιχειρήματα Επιστρεφόμενη Αξία
αριθμός ακροατών Όνομα συμβάντος Επιστρέφει τον αριθμό των ακροατών που έχουν εγγραφεί σε ένα συμβάν
ακροατές Όνομα συμβάντος Επιστρέφει μια σειρά από ακροατές
removeListener Όνομα συμβάντος Καταργεί τουλάχιστον έναν ακροατή από ένα καθορισμένο eventName.
αφαιρέστε όλους τους ακροατές Όνομα συμβάντος Καταργεί όλους τους ακροατές για ένα καθορισμένο eventName. Εάν δεν καθορίσετε ένα όνομα συμβάντος, αυτή η κλήση μεθόδου θα καταργήσει όλους τους ακροατές για το EventEmitter.
setMaxListeners αριθμός Αλλάζει τον προεπιλεγμένο μέγιστο αριθμό ακροατών ανά συμβάν. Χρησιμοποιήστε το άπειρο ή το μηδέν για να υποδείξετε έναν απεριόριστο αριθμό ακροατών. Από προεπιλογή, μπορείτε να εγγραφείτε μόνο δέκα ακροατές σε μια εκδήλωση.

Μπορείτε να καλέσετε αυτές τις μεθόδους μόνο σε ένα EventEmitter παράδειγμα.

Για παράδειγμα:

myEmitter.removeListener("TestEvent");

Το μπλοκ κώδικα παραπάνω καταργεί έναν μόνο ακροατή για το TestEvent Εκδήλωση.

Η σημασία των εκπομπών συμβάντων

Το Node.js υιοθετεί το πρότυπο προγραμματισμού που βασίζεται σε συμβάντα με την υποστήριξή του για εκπομπούς συμβάντων και ακροατές. Ο προγραμματισμός βάσει συμβάντων είναι ένας από τους λόγους για τους οποίους τα προγράμματα Node.js είναι πιο γρήγορα και πιο απλά από ορισμένες εναλλακτικές. Μπορείτε εύκολα να συγχρονίσετε πολλά συμβάντα, με αποτέλεσμα βελτιωμένη απόδοση.