Chaining promises in JavaScript

Let us have the following promise:

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

Upon completion of the promise, we print its result to the console:

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

Now let's not immediately display the result, but somehow change it and return it using return:

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

In this case, we can apply another then to the result of our then, thus creating a chain of methods. In this case, the result of the next method will include what was returned with a return by the previous one:

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

Thus, you can make a chain of any length:

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