Αλυσίδες Promises στην JavaScript
Ας υποθέσουμε ότι έχουμε το ακόλουθο promise:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('string');
}, 3000);
});
Όταν το promise ολοκληρωθεί, θα εμφανίσουμε το αποτέλεσμά του στην κονσόλα:
promise.then(
function(result) {
console.log(result); // θα εμφανίσει 'string'
}
)
Τώρα, αντί να εμφανίσουμε αμέσως το αποτέλεσμα,
ας το τροποποιήσουμε κάπως και να το επιστρέψουμε μέσω return:
promise.then(
function(result) {
return result + '!';
}
);
Σε αυτήν την περίπτωση, μπορούμε να εφαρμόσουμε ένα ακόμη then
στο αποτέλεσμα του προηγούμενου then, δημιουργώντας έτσι
μια αλυσίδα μεθόδων. Σε αυτήν την περίπτωση,
στο αποτέλεσμα της επόμενης μεθόδου θα περνάει
αυτό που επέστρεψε η προηγούμενη μέσω return:
promise.then(
function(result) {
return result + '!';
}
).then(
function(result) {
console.log(result); // θα εμφανίσει 'string!'
}
);
Με αυτόν τον τρόπο μπορεί να χτιστεί μια αλυσίδα οποιουδήποτε μήκους:
promise.then(
function(result) {
return result + '1';
}
).then(
function(result) {
return result + '2';
}
).then(
function(result) {
return result + '3';
}
).then(
function(result) {
console.log(result); // θα εμφανίσει 'string123'
}
);