// https://javascript.info/promise-chaining

// .then() returns a new Promise when you do "return",
// internally calling resolve().

new Promise(function (resolve, reject) {
  setTimeout(() => resolve(1), 1);
}).then(function (result) {
  console.log(result);
  return result * 2;
}).then(function (result) {
  console.log(result);
  return result * 2;
}).then(function (result) {
  console.log(result);
  return result * 2;
});

/*
    It will print
    1
    2
    4
*/

/*
  It means that "then" is internally implemented roughly as follows:

  function then(f){
    return new Promise(function(resolve, reject) {
        resolve(f());
    })
  }
*/

// Another example:

fetch('http://www.fsf.org')
  // .then below runs when the remote server responds
  .then(function (response) {
    // response.text() returns a new promise that resolves with the full response text
    // when it loads
    return response.text();
  })
  .then(function (text) {
    // ...and here's the content of the remote file
    console.log(text);
  });