Εκμάθηση υπόσχεσης Node.js

Πίνακας περιεχομένων:

Anonim

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

Σε αυτό το σεμινάριο, θα μάθετε-

  • Τι είναι οι υποσχέσεις;
  • Επιστροφή στις υποσχέσεις
  • Αντιμετωπίζοντας ένθετες υποσχέσεις
  • Δημιουργία προσαρμοσμένης υπόσχεσης

Τι είναι οι υποσχέσεις;

Πριν ξεκινήσουμε με υποσχέσεις, ας επανεξετάσουμε πρώτα ποιες είναι οι συναρτήσεις "callback" στο Node.js. Έχουμε δει πολλές αυτές τις λειτουργίες επανάκλησης στα προηγούμενα κεφάλαια, οπότε ας δούμε γρήγορα ένα από αυτά.

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

  1. Στον παραπάνω κώδικα, το μέρος της συνάρτησης (err, db) είναι γνωστό ως δήλωση ανώνυμης ή συνάρτησης επανάκλησης. Όταν το MongoClient δημιουργεί μια σύνδεση με τη βάση δεδομένων MongoDB, θα επιστρέψει στη λειτουργία επιστροφής κλήσης μόλις ολοκληρωθεί η λειτουργία σύνδεσης. Έτσι, κατά μία έννοια, οι λειτουργίες σύνδεσης συμβαίνουν στο παρασκήνιο, και όταν ολοκληρωθεί, καλεί τη λειτουργία επανάκλησης. Να θυμάστε ότι αυτό είναι ένα από τα βασικά σημεία του Node.js για να επιτρέπονται πολλές λειτουργίες ταυτόχρονα και έτσι να μην εμποδίζεται κανένας χρήστης από την εκτέλεση μιας λειτουργίας.

  2. Το δεύτερο μπλοκ κώδικα είναι αυτό που εκτελείται όταν καλείται πραγματικά η συνάρτηση επανάκλησης. Η συνάρτηση επανάκλησης ενημερώνει μόνο μια εγγραφή στη βάση δεδομένων MongoDB.

Τι είναι λοιπόν μια υπόσχεση; Λοιπόν, μια υπόσχεση είναι απλώς μια βελτίωση στις λειτουργίες επανάκλησης στο Node.js. Κατά τη διάρκεια του κύκλου ζωής ανάπτυξης, μπορεί να υπάρχει μια περίπτωση όπου θα πρέπει να τοποθετήσετε πολλές λειτουργίες επανάκλησης μαζί. Αυτό μπορεί να γίνει ακατάστατο και δύσκολο να διατηρηθεί σε μια συγκεκριμένη χρονική στιγμή. Εν ολίγοις, μια υπόσχεση είναι μια βελτίωση στις επιστροφές κλήσεων που αποσκοπούν στην αντιμετώπιση αυτών των προβλημάτων.

Η βασική σύνταξη μιας υπόσχεσης φαίνεται παρακάτω.

var promise = doSomethingAync()promise.then(onFulfilled, onRejected)
  • Το "doSomethingAync" είναι οποιαδήποτε επανάκληση ή ασύγχρονη συνάρτηση που κάνει κάποιο είδος επεξεργασίας.
  • Αυτή τη φορά, κατά τον ορισμό της επανάκλησης, υπάρχει μια τιμή που επιστρέφεται ονομάζεται "υπόσχεση".
  • Όταν μια υπόσχεση επιστραφεί, μπορεί να έχει 2 εξόδους. Αυτό ορίζεται από το «τότε ρήτρα». Είτε η λειτουργία μπορεί να είναι επιτυχής που δηλώνεται από την παράμετρο «onFulfilled». Ή μπορεί να έχει ένα σφάλμα που δηλώνεται από την παράμετρο «onRejected».

Σημείωση: Έτσι, η βασική πτυχή μιας υπόσχεσης είναι η τιμή επιστροφής. Δεν υπάρχει έννοια της τιμής επιστροφής όταν εργάζεστε με κανονικές επιστροφές κλήσεων στο Node.js. Λόγω της τιμής επιστροφής, έχουμε περισσότερο έλεγχο του τρόπου με τον οποίο μπορεί να οριστεί η λειτουργία επανάκλησης.

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

Επιστροφή στις υποσχέσεις

Τώρα ας δούμε ένα παράδειγμα για το πώς μπορούμε να χρησιμοποιήσουμε τις "υποσχέσεις" μέσα από μια εφαρμογή Node.js. Για να χρησιμοποιήσετε υποσχέσεις σε μια εφαρμογή Node.js, πρέπει πρώτα να κατεβάσετε και να εγκαταστήσετε την ενότητα «υπόσχεση».

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

Βήμα 1) Εγκατάσταση των μονάδων NPM

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

υπόσχεση εγκατάστασης npm

Βήμα 2) Τροποποιήστε τον κώδικα για να συμπεριλάβετε υποσχέσεις

var Promise = require('promise');var MongoClient = require('mongodb').MongoClient;var url = 'mongodb://localhost/EmployeeDB';MongoClient.connect(url).then(function(err, db) {db.collection('Employee').updateOne({"EmployeeName": "Martin"}, {$set: {"EmployeeName": "Mohan"}});});

Επεξήγηση κώδικα: -

  1. Το πρώτο μέρος είναι να συμπεριλάβουμε την ενότητα «υπόσχεση» που θα μας επιτρέψει να χρησιμοποιήσουμε τη λειτουργικότητα υπόσχεσης στον κώδικα μας.
  2. Τώρα μπορούμε να προσθέσουμε τη συνάρτηση «τότε» στη λειτουργία MongoClient.connect. Αυτό που κάνει λοιπόν είναι ότι όταν πραγματοποιηθεί σύνδεση με τη βάση δεδομένων, πρέπει να εκτελέσουμε το απόσπασμα κώδικα που ορίζεται στη συνέχεια.
  3. Τέλος, ορίζουμε το απόσπασμα κώδικα που κάνει το έργο της ενημέρωσης του EmployeeName του υπαλλήλου με το όνομα "Martin" σε "Mohan".

Σημείωση:-

Εάν ελέγξετε τώρα τα περιεχόμενα της βάσης δεδομένων MongoDB, θα διαπιστώσετε ότι εάν υπάρχει μια εγγραφή με το EmployeeName του "Martin", θα ενημερωθεί σε "Mohan."

Για να ελέγξετε ότι τα δεδομένα έχουν εισαχθεί σωστά στη βάση δεδομένων, πρέπει να εκτελέσετε τις ακόλουθες εντολές στο MongoDB

  1. Χρησιμοποιήστε το EmployeeDB
  2. db.Em Employee.find ({Όνομα υπαλλήλου: Mohan})

Η πρώτη δήλωση διασφαλίζει ότι είστε συνδεδεμένοι στη βάση δεδομένων EmployeeDb. Η δεύτερη δήλωση αναζητά την εγγραφή που έχει το όνομα υπαλλήλου "Mohan".

Αντιμετωπίζοντας ένθετες υποσχέσεις

Κατά τον καθορισμό υποσχέσεων, πρέπει να σημειωθεί ότι η ίδια η μέθοδος "τότε" επιστρέφει μια υπόσχεση. Έτσι, κατά μία έννοια, οι υποσχέσεις μπορούν να τοποθετηθούν ή να δεθούν μεταξύ τους.

Στο παρακάτω παράδειγμα, χρησιμοποιούμε αλυσίδα για να ορίσουμε 2 συναρτήσεις επανάκλησης, και οι δύο εισάγουν μια εγγραφή στη βάση δεδομένων MongoDB.

( Σημείωση : Η αλυσίδα είναι μια έννοια που χρησιμοποιείται για τη σύνδεση της εκτέλεσης των μεθόδων μεταξύ τους. Ας υποθέσουμε ότι αν η εφαρμογή σας είχε 2 μεθόδους που ονομάζονται «μέθοδος Α» και «μέθοδος Β». Και η λογική ήταν τέτοια ώστε η «μέθοδος Β» πρέπει να καλείται μετά τη «μέθοδο Α», τότε θα αλυσολογήσατε την εκτέλεση με τέτοιο τρόπο ώστε η "μέθοδος Β" να καλείται αμέσως μετά τη "μέθοδο Α.")

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

var Promise = require('promise');var MongoClient = require('mongodb').MongoClient;var url = 'mongodb://localhost/EmployeeDB';MongoClient.connect(url).then(function(db) {db.collection('Employee').insertOne({Employeeid: 4,EmployeeName: "NewEmployee"}).then(function(db1) {db1.collection('Employee').insertOne({Employeeid: 5,EmployeeName: "NewEmployee1"})})});

Επεξήγηση κώδικα: -

  1. Τώρα ορίζουμε 2 "μετά" ρήτρες που εκτελούνται το ένα μετά το άλλο. Στην πρώτη τότε ρήτρα, περνάμε την παράμετρο «db» που περιέχει τη σύνδεση βάσης δεδομένων μας. Στη συνέχεια, χρησιμοποιούμε την ιδιότητα συλλογής της σύνδεσης "db" για να εισάγουμε εγγραφές στη συλλογή "Υπάλληλος". Η μέθοδος «insertOne» χρησιμοποιείται για την εισαγωγή του πραγματικού εγγράφου στη συλλογή υπαλλήλων.
  2. Στη συνέχεια, χρησιμοποιούμε τη δεύτερη και στη συνέχεια ρήτρα για να εισαγάγουμε μια άλλη εγγραφή στη βάση δεδομένων.

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

Δημιουργία προσαρμοσμένης υπόσχεσης

Μια προσαρμοσμένη υπόσχεση μπορεί να δημιουργηθεί χρησιμοποιώντας μια μονάδα κόμβου που ονομάζεται «q». Πρέπει να κάνετε λήψη και εγκατάσταση της βιβλιοθήκης «q» χρησιμοποιώντας τον διαχειριστή πακέτων κόμβων. Μετά τη χρήση της βιβλιοθήκης «q», μπορεί να κληθεί η μέθοδος «denodeify» η οποία θα προκαλέσει οποιαδήποτε λειτουργία να γίνει συνάρτηση που επιστρέφει μια υπόσχεση.

Στο παρακάτω παράδειγμα, θα δημιουργήσουμε μια απλή λειτουργία που ονομάζεται "Προσθήκη" η οποία θα προσθέσει 2 αριθμούς. Θα μετατρέψουμε αυτήν τη συνάρτηση σε μια συνάρτηση για να επιστρέψουμε μια υπόσχεση.

Μόλις γίνει αυτό, θα χρησιμοποιήσουμε την υπόσχεση που επιστρέφεται από τη συνάρτηση Προσθήκη για να εμφανιστεί ένα μήνυμα στο console.log.

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

Βήμα 1) Εγκατάσταση των μονάδων NPM

Για να χρησιμοποιήσετε το «q» μέσα από μια εφαρμογή Node JS, απαιτείται η ενότητα «q». Για να εγκαταστήσετε την ενότητα «q», εκτελέστε την παρακάτω εντολή

npm εγκατάσταση q

Βήμα 2) Ορίστε τον ακόλουθο κώδικα που θα χρησιμοποιηθεί για τη δημιουργία της προσαρμοσμένης υπόσχεσης.

Επεξήγηση κώδικα: -

  1. Το πρώτο bit είναι να συμπεριλάβετε τη βιβλιοθήκη «q» χρησιμοποιώντας τη λέξη-κλειδί που απαιτείται. Χρησιμοποιώντας αυτήν τη βιβλιοθήκη, θα είμαστε σε θέση να καθορίσουμε οποιαδήποτε λειτουργία για να επιστρέψουμε μια επιστροφή κλήσης.
  2. Δημιουργούμε μια συνάρτηση που ονομάζεται Προσθήκη, η οποία θα προσθέσει 2 αριθμούς που ορίζονται στις μεταβλητές a και b. Το άθροισμα αυτών των τιμών θα αποθηκευτεί στη μεταβλητή c.
  3. Στη συνέχεια, χρησιμοποιούμε τη βιβλιοθήκη q για αποκοίνωση (η μέθοδος που χρησιμοποιείται για τη μετατροπή οποιασδήποτε συνάρτησης σε συνάρτηση που θα επέστρεφε μια υπόσχεση) τη συνάρτηση Προσθήκη ή με διαφορετικό τρόπο τη μετατροπή της συνάρτησης Προσθήκη σε μια συνάρτηση που επιστρέφει μια υπόσχεση.
  4. Τώρα καλούμε τη συνάρτηση "Προσθήκη" και είμαστε σε θέση να λάβουμε μια τιμή υπόσχεσης επιστροφής, λόγω του προηγούμενου βήματος που κάναμε για την αποδιαμόρφωση της συνάρτησης Προσθήκη.
  5. Η λέξη-κλειδί «τότε» χρησιμοποιείται καθορίζει ότι εάν η συνάρτηση εκτελεστεί επιτυχώς, εμφανίστε τη συμβολοσειρά «Η συνάρτηση προσθήκης ολοκληρώθηκε» στο console.log.

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

Περίληψη

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