2016-06-08 54 views
19

Desidero utilizzare l'implementazione bluebird dello standard aperto Promise/A+ e sovrascrivere native ES6 Promises. Voglio anche che l'implementazione bluebird sia disponibile ovunque nei miei moduli importati successivamente senza doverla richiedere in ognuno di essi. Pagina di Bluebird Getting started mi dice di:È possibile sovrascrivere la promessa di ES6 mediante l'implementazione di bluebird nell'ambito globale del nodo?

var Promise = require("bluebird"); 

, che si traduce in ignorando l'elemento Promessa nativo. Poiché bluebird è un superset della specifica, non romperà il codice esistente e quindi dovrebbe essere sicuro da usare.

Tuttavia, perché so che è considerato cattiva pratica di:

  1. estendere o sostituire nativi lingua, e
  2. definire variabili globali per l'impiego in una catena di richiedere che dipende da esso

, Sono cauto quando voglio includere questo nello script di base di un'app di nodo:

import Promise from 'bluebird'; 
global.Promise = Promise; 

È una cattiva pratica? Dovrei limitarmi a importare bluebird in ogni singolo file?

+1

Solo perché sono curioso: perché vuoi ignorare l'implementazione di base Promise? –

+1

Errori generalmente più veloci, più sicuri, migliori e componenti aggiuntivi API incredibilmente utili. Controlla quelli fuori: http://bluebirdjs.com/docs/why-bluebird.html http://bluebirdjs.com/docs/api-reference.html –

+1

> * Desidero anche che l'implementazione bluebird sia disponibile ovunque nel mio seguito moduli importati senza doverli richiedere in ognuno di essi *. Perché? 'var Promise = require (" bluebird ");' è esplicito, chiaro, auto-documentante e non magico. –

risposta

14

Ho fatto questo centinaia di volte nel mio codice negli ultimi 4 anni e quindi ne ho molti altri tra i 10 milioni di download mensili.

È ufficialmente supportato il cambio di implementazione nativa con bluebird.

lo faccio

const Promise = require("bluebird"); 

Su una base per-file. Tieni presente che, di solito, puoi promisurare le tue API una sola volta e in genere evitare di chiamare Promise - chiamando al massimo .resolve.

+0

Ho ricevuto un errore da jsHint che diceva "Redefinizione di promessa", qualche idea su come aggirare questo errore? – kamal0808

+0

@ kamal0808 questo problema github tratta del problema in modo estensivo https://github.com/jshint/jshint/issues/1747 –