Middle
Τι χρησιμοποιούσατε πριν από την εμφάνιση του Promise;
sobes.tech AI
Απάντηση από AI
Πριν από την εμφάνιση του Promise, οι callbacks χρησιμοποιούνταν ευρέως.
Ουσία των callbacks:
Μια λειτουργία περνάει σε μια άλλη ως όρισμα και εκτελείται μετά την ολοκλήρωση μιας συγκεκριμένης λειτουργίας.
Παράδειγμα:
// Παράδειγμα κλήσης ασύγχρονης λειτουργίας με callback
function fetchData(callback) {
setTimeout(() => {
const data = "Μερικά δεδομένα";
callback(null, data); // Το πρώτο όρισμα είναι σφάλμα, το δεύτερο το αποτέλεσμα
}, 1000);
}
fetchData((err, data) => {
if (err) {
console.error("Σφάλμα κατά την ανάκτηση δεδομένων:", err);
} else {
console.log("Ληφθέντα δεδομένα:", data);
}
});
Μειονεκτήματα της χρήσης μόνο callbacks:
- Callback Hell (Κόλαση των callbacks): Η αλυσίδα ενσωματωμένων ασύγχρονων λειτουργιών οδηγεί σε πολύ ενσωματωμένο και δύσκολο στην ανάγνωση κώδικα.
- Δυσκολίες στη διαχείριση σφαλμάτων: Απαιτείται η μεταβίβαση και ο έλεγχος σφαλμάτων σε κάθε επίπεδο ενσωμάτωσης.
- Έλλειψη τυποποιημένης προσέγγισης: Διάφορες βιβλιοθήκες μπορούσαν να χρησιμοποιούν διαφορετικές συμφωνίες για callbacks.
Εναλλακτικές προσεγγίσεις πριν από το Promise:
Πριν από την εμφάνιση του Promise, εκτός από τα "καθαρά" callbacks, χρησιμοποιούνταν βιβλιοθήκες και μοτίβα για τη διαχείριση της ασύγχρονης λειτουργίας, όπως:
- Βιβλιοθήκες ασύγχρονης λειτουργίας: Για παράδειγμα, το
async(για Node.js, αλλά και για τον browser). Παρείχαν εργαλεία για τη διαχείριση ασύγχρονων ροών (παράλληλη εκτέλεση, διαδοχική εκτέλεση). - Μοτίβο Publisher/Subscriber (Pub/Sub): Για πιο πολύπλοκα σενάρια αλληλεπίδρασης.
- Εκπομποί γεγονότων: Στο Node.js και σε περιβάλλοντα browser (π.χ.,
EventEmitter).
Ωστόσο, οι callbacks παρέμεναν η βάση για πολλές ασύγχρονες λειτουργίες. Το Promise παρείχε έναν πιο δομημένο, ενοποιημένο και ευανάγνωστο τρόπο εργασίας με την ασύγχρονη λειτουργία, επιλύοντας πολλά προβλήματα του "Callback Hell".