Cadenas de Promesas en JavaScript

Tengamos la siguiente promesa:

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

Al completarse la promesa, mostraremos su resultado en la consola:

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

Ahora no mostraremos el resultado inmediatamente, sino que lo modificaremos y lo devolveremos mediante return:

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

En este caso, podemos aplicar otro then al resultado de nuestro then, creando así una cadena de métodos. Donde al resultado del siguiente método llegará lo que devolvió mediante return el anterior:

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

De esta manera, se puede construir una cadena de cualquier longitud:

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