Convert promise to bluebird

Javascriptnode.jsPromiseBluebird

Javascript Problem Overview


I found an existing library that uses promises, however it doesn't use bluebird. The library functions don't come with all the extra features bluebird does like .map() or .tap(). How do I convert a "normal" or "non-bluebird" promise to a bluebird one, with all the extra features bluebird offers?

I tried wrapping the existing promise in Promise.promisify and Promise.resolve and neither seemed to work.

Javascript Solutions


Solution 1 - Javascript

Use Promise.resolve - it will take any thenable, like a promise from some other implementation, and assimilate it into a Bluebird promise.

Keep in mind that the term "resolve" can be misleading, it does not mean the same as "fulfill" but can also follow another promise and settle to its result.

Solution 2 - Javascript

If you want to convert the promise to a bluebird promise resolve nothing and return the customPromise then you'll have access to all of bluebirds custom methods in the chain.

Promise.resolve().then(function(){
  return customPromise()
})

Or

Promise.resolve(customPromise())

Solution 3 - Javascript

Use Bluebird's Promise.method!

const Promise = require('bluebird');

const fn = async function() { return 'tapped!' };

bluebirdFn = Promise.method(fn);

bluebirdFn().tap(console.log) // tapped!
fn().tap(console.log) // error

Solution 4 - Javascript

Using to-bluebird:

const toBluebird = require("to-bluebird");

const es6Promise = new Promise(resolve => resolve("Hello World!")); // Regular native promise.
const bluebirdPromise = toBluebird(es6Promise); // Bluebird promise.

Native alternative:

In ECMAScript:

import {resolve as toBluebird} from "bluebird"

In CommonJS:

const {resolve: toBluebird} = require("bluebird")

Usage:

const regularPromise = new Promise((resolve) => {
    resolve("Hello World!") // Resolve with "Hello World!"
})

const bluebirdPromise = toBluebird(regularPromise) // Convert to Bluebird promise

bluebirdPromise.then(val => console.log(val)) // Will log "Hello World!"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionThomasReggiView Question on Stackoverflow
Solution 1 - JavascriptBergiView Answer on Stackoverflow
Solution 2 - JavascriptThomasReggiView Answer on Stackoverflow
Solution 3 - JavascriptrichardpringleView Answer on Stackoverflow
Solution 4 - JavascriptRichie BendallView Answer on Stackoverflow