Catene di Promise in JavaScript

Supponiamo di avere la seguente Promise:

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

Alla risoluzione della Promise, stampiamo il suo risultato in console:

javascriptpromise.then(
  function(result) {
    console.log(result); // stamperà 'string'
  }
)

Ora, invece di stampare immediatamente il risultato, modifichiamolo e restituiamolo tramite return:

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

In questo caso, possiamo applicare un altro then al risultato del nostro then, creando così una catena di metodi. In questo modo, al metodo successivo passerà ciò che è stato restituito tramite return dal precedente:

javascriptpromise.then(
  function(result) {
    return result + '!';
  }
).then(
  function(result) {
    console.log(result); // stamperà 'string!'
  }
);

In questo modo è possibile costruire una catena di qualsiasi lunghezza:

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); // stamperà 'string123'
  }
);