Αυτή η εγγραφή εξηγεί τη λειτουργία και την υλοποίηση της ροής ασύγχρονου ελέγχου στο 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.