Вериги от промени в JavaScript

Да предположим, че имаме следната промяна:

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

При завършване на промяната ще изведем нейния резултат в конзолата:

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