bluebird Converting a callback API to promises. Converting any other callback API

Help us to keep this website almost Ad Free! It takes only 10 seconds of your time:
> Step 1: Go view our video on YouTube: EF Core Bulk Extensions
> Step 2: And Like the video. BONUS: You can also share it!


In order to convert any callback API to promises assuming the promisify and promisifyAll version doesn't fit - you can use the promise constructor.

Creating promises generally means specifying when they settle - that means when they move to the fulfilled (completed) or rejected (errored) phase to indicate the data is available (and can be accessed with .then).

new Promise((fulfill, reject) => { // call fulfill/reject to mark the promise
   someCallbackFunction((data) => {
      fulfill(data); // we mark it as completed with the value

As an example, let's convert setTimeout to use promises:

function delay(ms) { // our delay function that resolves after ms milliseconds
  return new Promise((resolve, reject) => { // return a new promise
    setTimeout(resolve, ms); // resolve it after `ms` milliseconds have passed
// or more concisely:
const delay = ms => new Promise(r => setTimeout(r, ms));

We can now use it like a regular promise returning function:

delay(1000).then(() => console.log("One second passed")).
            then(() => delay(1000)).
            then(() => console.log("Another second passed"));

Got any bluebird Question?