Ланцугі промісаў у 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'
  }
);