Lanțuri de promisiuni în JavaScript

Să presupunem că avem următoarea promisiune:

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

La finalizarea promisiunii, vom afișa rezultatul acesteia în consolă:

javascriptpromise.then(
  function(result) {
    console.log(result); // va afișa 'string'
  }
)

Acum, în loc să afișăm imediat rezultatul, să-l modificăm cumva și să-l returnăm prin return:

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

În acest caz, putem aplica un alt then rezultatului nostru din then, creând astfel un lanț de metode. În acest caz, rezultatul următoarei metode va primi ceea ce a returnat precedentul prin return:

javascriptpromise.then(
  function(result) {
    return result + '!';
  }
).then(
  function(result) {
    console.log(result); // va afișa 'string!'
  }
);

Astfel, se poate construi un lanț de orice lungime:

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); // va afișa 'string123'
  }
);