Αλυσίδες Promises στην JavaScript

Ας υποθέσουμε ότι έχουμε το ακόλουθο promise:

javascriptlet promise = new Promise(function(resolve, reject) {
  setTimeout(function() {
    resolve('string');
  }, 3000);
});

Όταν το promise ολοκληρωθεί, θα εμφανίσουμε το αποτέλεσμά του στην κονσόλα:

javascriptpromise.then(
  function(result) {
    console.log(result); // θα εμφανίσει 'string'
  }
)

Τώρα, αντί να εμφανίσουμε αμέσως το αποτέλεσμα, ας το τροποποιήσουμε κάπως και να το επιστρέψουμε μέσω return:

javascriptpromise.then(
  function(result) {
    return result + '!';
  }
);

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

javascriptpromise.then(
  function(result) {
    return result + '!';
  }
).then(
  function(result) {
    console.log(result); // θα εμφανίσει 'string!'
  }
);

Με αυτόν τον τρόπο μπορεί να χτιστεί μια αλυσίδα οποιουδήποτε μήκους:

javascriptpromise.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'
  }
);