Promise ketjut JavaScriptissä

Oletetaan, että meillä on seuraava promise:

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

Promisea valmistumisen jälkeen tulostamme sen tuloksen konsoliin:

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

Älkäämme nyt tulostako tulosta välittömästi, vaan muutetaan sitä jotenkin ja palautetaan se return:n kautta:

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

Tässä tapauksessa voimme tulokseemme then:stä soveltaa vielä toisen then:in, luoden näin ketjun metodeista. Samalla seuraavan metodin tulokseen tulee se, minkä edellinen palautti return:lla:

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

Näin voidaan rakentaa minkä pituinen tahansa ketju:

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