web-dev-qa-db-fra.com

Convertir la promesse en oiseau bleu

J'ai trouvé une bibliothèque existante qui utilise des promesses, mais elle n'utilise pas Bluebird. Les fonctions de bibliothèque ne sont pas livrées avec toutes les fonctionnalités supplémentaires que Bluebird aime .map() ou .tap(). Comment convertir une promesse "normale" ou "non Bluebird" en promesse Bluebird, avec toutes les fonctionnalités supplémentaires qu'offre Bluebird?

J'ai essayé d'envelopper la promesse existante dans Promise.promisify et Promise.resolve et ni l'un ni l'autre ne semblait fonctionner.

49
ThomasReggi

Utilisation Promise.resolve - il prendra tout élément exploitable, comme une promesse d'une autre implémentation, et l'assimilera à une promesse Bluebird.

Gardez à l'esprit que le terme "résoudre" peut être trompeur, cela ne signifie pas la même chose que "remplir" mais peut également suivre une autre promesse et se contenter de son résultat.

74
Bergi

Si vous souhaitez convertir la promesse en promesse Bluebird, ne résolvez rien et renvoyez le customPromise, vous aurez alors accès à toutes les méthodes personnalisées Bluebird de la chaîne.

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

Ou

Promise.resolve(customPromise())
16
ThomasReggi

Utilisez le 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
1
richardpringle

J'utilise la méthode Bluebird.resolve() pour convertir la promesse js native en promesse bluebird.

public getBatched(query: QueryBuilder | Raw): Bluebird<any> {
  return Bluebird.resolve(this.cache.getBatched(query));
}
0
slideshowp2