2015-06-15 16 views
40

Ho trovato una libreria esistente che utilizza promesse, tuttavia non usa bluebird. Le funzioni della libreria non vengono fornite con tutte le funzionalità extra come bluebird come .map() o .tap(). Come posso convertire una promessa "normale" o "non blu" a una bluebird, con tutte le funzionalità extra offerte bluebird?Converti promessa a bluebird

Ho provato a racchiudere la promessa esistente in Promise.promisify e Promise.resolve e nessuno dei due sembrava funzionare.

+0

Aggiornato e trovato la risposta corretta, questo non era particolarmente semplice perché ho sempre avuto una promessa di bluebird in cima alla mia catena di promesse. – ThomasReggi

risposta

62

Usa Promise.resolve - ci vorranno tutti i possibili, come una promessa da qualche altra implementazione, e assimilarli in una promessa Bluebird.

Ricordare che the term "resolve" può essere fuorviante, non significa lo stesso di "adempiere" ma può anche seguire un'altra promessa e stabilirsi al suo risultato.

+0

Che dire di un errore? rifiutare? – danfromisrael

+0

@danfromisrael 'Promise.resolve' prenderà anche promesse respinte e le assimilerà allo stesso modo. – Bergi

+1

esempio: var Promise = require ("bluebird"); Promise.resolve (nonBluebirdPromise) .reflect() Reflect è solo una funzione bluebird e non sarebbe stata disponibile altrimenti – Leo

12

Se si desidera convertire la promessa in promessa di un bluebird non risolvere nulla e restituire il customPromise allora si avrà accesso a tutti i metodi personalizzati bluebirds nella catena.

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

O

Promise.resolve(customPromise()) 
+8

'Promise.resolve (customPromise())' dovrebbe essere sufficiente, non c'è bisogno di un extra '.then'. –

+4

@LeonidBeschastny un 'Promise.try' potrebbe funzionare anche se è necessario proteggere da eccezioni sincrone –

1

di Promise.method Usa Bluebird!

const Promise = require('bluebird')'; 

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

bluebirdFn = Promise.method(fn); 

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