Τι είναι η ασύγχρονη ροή ελέγχου στο Node.js;

Ti Einai E Asynchrone Roe Elenchou Sto Node Js



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

Αυτή η εγγραφή εξηγεί τη λειτουργία και την υλοποίηση της ροής ασύγχρονου ελέγχου στο Node.js.

Τι είναι η ασύγχρονη ροή ελέγχου στο Node.js;

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







Ας έχουμε ένα παράδειγμα κώδικα για να βελτιώσουμε το επίπεδο κατανοητότητας της ασύγχρονης ροής ελέγχου:



ήταν το fsObj = απαιτώ ( 'fs' ) ;
//Αφηρημένη συνάρτηση επανάκλησης
λειτουργία readFileAsync ( targetFilePath ) {
ΕΠΙΣΤΡΟΦΗ νέος Υπόσχεση ( ( επιλύω, απορρίπτω ) => {
fsObj. readFile ( targetFilePath, 'utf-8' , ( σφάλμα, περιεχόμενο ) => {
αν ( λάθος ) {
απορρίπτω ( λάθος ) ;
} αλλού {
αποφασίζω ( περιεχόμενο ) ;
}
} ) ;
} ) ;
}

// Λειτουργία για την εκτέλεση πολλαπλών αρχείων ανάγνωσης στη σειρά
async λειτουργία readFileSequentially ( ) {
δοκιμάστε {
συνθ αρχείο 1 Δεδομένα = περιμένετε readFileAsync ( 'mynewfile1.txt' ) ;
κονσόλα. κούτσουρο ( 'Δεδομένα πρώτου αρχείου:' , file1Data ) ;

συνθ file2Data = περιμένετε readFileAsync ( 'usecase.txt' ) ;
κονσόλα. κούτσουρο ( 'Δεδομένα δεύτερου αρχείου:' , file2Data ) ;

συνθ file3Data = περιμένετε readFileAsync ( 'package.json' ) ;
κονσόλα. κούτσουρο ( 'Δεδομένα τρίτου αρχείου:' , file3Data ) ;
} σύλληψη ( λάθος ) {
κονσόλα. λάθος ( 'Παρουσιάστηκε σφάλμα:' , λάθος ) ;
}
}

readFileSequentially ( ) ;

Η επεξήγηση του παραπάνω κώδικα έχει ως εξής:



  • Πρώτα, εισαγάγετε το ' fs ' module και αποθηκεύστε το αντικείμενό της στο ' fsObj ” μεταβλητή.
  • Στη συνέχεια, ορίστε ένα ' readFileAsync() ' με όνομα συνάρτηση που έχει την μοναδική παράμετρο ' targetFilePath ” που περιέχει τη διαδρομή για ένα στοχευμένο αρχείο.
  • Αυτή η συνάρτηση επιστρέφει ένα ' υπόσχεση ' που περιέχει την απαιτούμενη συνάρτηση επανάκλησης που αποτελείται από δύο παραμέτρους και συγκεκριμένα ' αποφασίζω ' και ' απορρίπτω '.
  • Μέσα στη λειτουργία επανάκλησης, καλέστε το ' readFile() ' μέθοδος που παρέχεται από το ' fs ενότητα. Επίσης, περάστε την παρεχόμενη παράμετρο του ' targetFilePath ' ως πρώτη παράμετρος για τη μέθοδο 'readFile()'.
  • Ο ' readFile Η μέθοδος ' περιέχει επίσης την απαιτούμενη συνάρτηση επανάκλησης με τις παραμέτρους ' λάθος ' και ' περιεχόμενο '. Πέρνα το ' λάθος ' μέσα στο ' απορρίπτω() ' μέθοδος σε περίπτωση εμφάνισης σφαλμάτων και ' περιεχόμενο ' μέσα στο ' αποφασίζω() ' μέθοδος σε περίπτωση που δεν βρέθηκε σφάλμα.
  • Τώρα, δημιουργήστε μια ασύγχρονη συνάρτηση με το όνομα ' readFileSequentialy() 'και περιέχει ένα ' προσπάθησε να πιάσεις ' ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ.
  • Μεσα στην ' δοκιμάστε ' μπλοκ, δημιουργήστε τρεις μεταβλητές που αποθηκεύουν το αποτέλεσμα που δημιουργείται με την κλήση του ήδη δημιουργημένου ' readFileAsync() ' λειτουργία. Κάθε φορά που η διαδρομή για το επιθυμητό αρχείο που πρέπει να εκτελεστεί περνά μέσα σε αυτήν την παρένθεση συνάρτησης.
  • Η λέξη κλειδί ' αναμένω Το ” τοποθετείται επίσης πίσω από τη λειτουργία τη στιγμή της κλήσης για να σταματήσει η ροή ελέγχου μέχρι να ολοκληρωθεί η ενέργεια ανάγνωσης του αρχείου.
  • Επίσης, εμφανίστε τις μεταβλητές στην κονσόλα για να εμφανίσετε το περιεχόμενο του αρχείου που ανακτήθηκε ή διαβάσατε.
  • Τέλος, επικαλέστε το που περιέχει ' readFileSequentialy() ' λειτουργία.

Για να το εκτελέσετε, τοποθετήστε τον παραπάνω κώδικα στο επιθυμητό αρχείο με επέκταση ' .js ” που κατοικεί μέσα στο έργο σας Node.js. Το κύριο αρχείο στην περίπτωσή μας είναι ' controlFlow.js ”, οπότε η εντολή εκτέλεσής μας θα είναι η εξής:





κόμβος controlFlow. js

Η παραγόμενη έξοδος δείχνει ότι τα δεδομένα για τα επιθυμητά αρχεία που χρησιμοποιούν ασύγχρονη ροή ελέγχου εμφανίζονται με τη σειρά:



Ποιες είναι οι πιθανές αιτίες και τα βήματα αποφυγής για τον αποκλεισμένο κώδικα Node.js;

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

Αιτίες αποκλεισμού κώδικα Λύση για αποκλεισμό κωδικών
Χρήση σύγχρονων λειτουργιών αρχείων όπως fs.readFileSync(). Χρησιμοποιήστε ασύγχρονες λειτουργίες αρχείων όπως το fs.readFile.
Χρήση λειτουργιών που συνδέονται με την CPU, όπως βαρείς υπολογισμοί ή βρόχους μεγάλης διάρκειας. Μεταφορτώστε εργασίες συνδεδεμένες με CPU σε νήματα εργαζόμενου, σπάζοντας τα σε μικρότερα, μη μπλοκαρισμένα κομμάτια.
Αργή αιτήματα εξωτερικού δικτύου λόγω της χρήσης αιτημάτων HTTP σε απομακρυσμένα API Χρησιμοποιήστε ασύγχρονες βιβλιοθήκες HTTP όπως το Axios ή τις ενσωματωμένες μονάδες 'http' ή 'https'.
Μη βελτιστοποιημένα ερωτήματα βάσης δεδομένων Βελτιστοποιήστε τα ερωτήματα της βάσης δεδομένων χρησιμοποιώντας τα εργαλεία βελτιστοποίησης ερωτημάτων που παρέχονται από τη βάση δεδομένων.
Χρήση άπειρων βρόχων ή σφιχτών βρόχων χωρίς σπασίματα. Βεβαιωθείτε ότι οι βρόχοι έχουν συνθήκες εξόδου και ότι δεν εκτελούνται απεριόριστα.

συμπέρασμα

Η ασύγχρονη ροή ελέγχου χρησιμοποιεί τις λέξεις-κλειδιά ' ασυγχρονισμός/αναμονή ” για να τροποποιήσετε ή να ελέγξετε τη ροή της εκτέλεσης με ασύγχρονο τρόπο. Η επανάκληση για την απαιτούμενη ασύγχρονη μέθοδο αφαιρείται και αποθηκεύεται σε ξεχωριστή συνάρτηση. Αυτή η συνάρτηση στη συνέχεια καλείται με τη βοήθεια της λέξης-κλειδιού αναμονής με διαδοχικό τρόπο μαζί με άλλες μεθόδους όπως επιθυμείτε. Αυτές οι συναρτήσεις αποθηκεύονται σε μια άλλη προσαρμοσμένη ασύγχρονη συνάρτηση η οποία στη συνέχεια καλείται για να ξεκινήσει η εκτέλεση. Αυτός ο οδηγός έχει εξηγήσει την ασύγχρονη ροή ελέγχου στο Node.js.