Είμαι αρκετά νέος στον προγραμματισμό τύπου callback σε javascript. Υπάρχει τρόπος να αναγκαστεί ο κωδικός να περιμένει μέχρι να ολοκληρωθεί μια κλήση λειτουργίας μέσω μιας επανάκλησης; ΑΣΕ με να εξηγήσω. Η παρακάτω συνάρτηση παίρνει έναν αριθμό και επιστρέφει ένα αποτέλεσμα με βάση αυτόν.
function get_expensive_thing(n) {
return fetch_from_disk(n);
}
Μέχρι εδώ, αρκετά εύκολο. Τι κάνω όμως όταν το fetch_from_disk
επιστρέφει το αποτέλεσμά του μέσω επανάκλησης; Όπως έτσι:
function get_expensive_thing(n) {
fetch_from_disk(n, function(answer) {
return answer; // Does not work
});
}
Τα παραπάνω δεν λειτουργούν επειδή το return
βρίσκεται στο πεδίο εφαρμογής της ανώνυμης συνάρτησης και όχι στη συνάρτηση get_expensive_thing
.
Υπάρχουν δύο πιθανές «λύσεις», αλλά και οι δύο είναι ανεπαρκείς. Το ένα είναι να επαναπροσδιορίσει το get_expensive_thing
στον εαυτό του να απαντήσει με μια επανάκληση:
function get_expensive_thing(n, callback) {
fetch_from_disk(n, function(answer) {
callback(answer);
});
}
Το άλλο είναι να επανακωδικοποιήσετε fetch_from_disk
, αλλά αυτό δεν αποτελεί επιλογή.
Πώς μπορούμε να επιτύχουμε το επιθυμητό αποτέλεσμα διατηρώντας την επιθυμητή συμπεριφορά του get_expensive_thing
-- δηλαδή, να περιμένουμε μέχρι ο fetch_from_disk
να καλέσει την επανάκληση και μετά να επιστρέψει αυτήν την απάντηση;