Files
website/src/content/docs/js/simplifying-promises.md
T
2019-07-26 14:37:31 -07:00

1.7 KiB

author, date
author date
@Xetera 2019/07/26

Simplifying Promises

-- placeholder --

The first naive attempt, using new Promise for something that already returns a promise.

function doAsync(number) {
  return new Promise(function(resolve, reject) {
    doDatabase().then(function(dbResult) {
      otherDbFunction(dbResult).then(function(secondResult) {
        resolve(secondResult + 10);
      })
    });
  })
}

Turns out you don't need new Promise if you're working with a function that already returns a promise, you can just return the original thing.

function doAsync(number) {
  return doDatabase().then(function(dbResult) {
    otherDbFunction(dbResult).then(function(secondResult) {
      return secondResult + 10;
    })
  });
}

You also don't have to nest .then functions, the whole point of promises is that they allow you do chain them sequentially.

function doAsync(number) {
  return doDatabase().then(function(dbResult) {
    return otherDbFunction(dbResult)
  }).then(function(secondResult) {
    return secondResult + 10;
  });
}

you also don't have to create a new function just to pass in one variable, you can pass in the entire function itself to the then block

function doAsync(number) {
  return doDatabase()
    .then(otherDbFunction)
    .then(function(secondResult) {
      return secondResult + 10;
    });
}

And you don't need those returns if you just have ES6 arrow functions

const doAsync = number => doDatabase()
  .then(otherDbFunction)
  .then(secondResult => secondResult + 10);

Wow, that last one looks a lot cleaner to me than the first. Keeping that in mind, maybe we could be making some of our other functions cleaner as well