Łańcuchy promise w JavaScript

Załóżmy, że mamy następującą promise:

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

Po zakończeniu promise wypiszmy jej wynik w konsoli:

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

A teraz nie wypisujmy od razu wyniku, lecz go zmodyfikujmy i zwróćmy przez return:

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

W tym przypadku możemy do wyniku naszego then zastosować jeszcze jeden then, tworząc w ten sposób łańcuch metod. Przy tym do wyniku następnej metody trafi to, co zwrócił przez return poprzedni:

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

W ten sposób można zbudować łańcuch dowolnej długości:

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