Promise grandinės JavaScript

Tarkime, kad turime šį promise:

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

Pasibaigus promise, išvesime jo rezultatą į konsolę:

javascriptpromise.then(
  function(result) {
    console.log(result); // išves 'string'
  }
)

Dabar ne iš karto išvesime rezultatą, o kažkaip jį pakeisime ir grąžinsime per return:

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

Šiuo atveju galime prie mūsų then rezultato pritaikyti dar vieną then, taip sukurdami grandinę metodų. Tuo pačiu į kito metodo rezultatą pateks tai, ką per return grąžino ankstesnis:

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

Taigi galima sukurti bet kokio ilgio grandinę:

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); // išves 'string123'
  }
);