2016-06-08 23 views
19

Chcę użyć wersji bluebird otwartego standardu Promise/A+ i zastąpić native ES6 Promises. Chcę również, aby implementacja bluebird była dostępna wszędzie w moich później importowanych modułach bez konieczności wymagania jej w każdym z nich. Bluebird za Getting started strona mówi mi:Czy mogę przesłonić obietnicę ES6 przez wdrożenie bluebird w globalnym zasięgu węzła?

var Promise = require("bluebird"); 

, co powoduje nadpisanie rodzimy element, obiecuję. Ponieważ bluebird jest nadzbiorem specyfikacji, nie złamie istniejącego kodu i dlatego powinien być bezpieczny w użyciu.

Jednakże, ponieważ wiem, że to jest uważane za złą praktyką:

  1. rozszerzyć lub wymienić tubylców językowych i
  2. zdefiniowanie globalnych do wykorzystania w sieci wymaga, że ​​zależy od niego

, Jestem ostrożny, gdy chcę uwzględnić to w skrypcie podstawowym aplikacji węzła:

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

Czy to jest zła praktyka? Czy powinienem trzymać się importu bluebirda w każdym pliku?

+1

Tylko dlatego, że jestem ciekawy: dlaczego chcesz zastąpić podstawową realizację obietnicy? –

+1

Generalnie szybsze, bezpieczniejsze, lepsze błędy i niesamowicie pomocne dodatki API. Sprawdź te: http://bluebirdjs.com/docs/why-bluebird.html http://bluebirdjs.com/docs/api-reference.html –

+1

> * Chcę również, aby implementacja bluebird była dostępna wszędzie w moim późniejszym importowane moduły bez konieczności ich stosowania w każdym z nich *. Czemu? 'var Promise = require (" bluebird ");' jest wyraźne, jasne, samo-dokumentujące, a nie magiczne. –

Odpowiedz

14

Zrobiłem setki razy w moim kodzie w ciągu ostatnich 4 lat, a więc mam wiele innych wśród 10 milionów miesięcznych pobrań.

Oficjalnie obsługiwana jest zamiana natywnej implementacji na bluebird.

zrobić

const Promise = require("bluebird"); 

Na podstawie na plik. Zauważ, że zazwyczaj możesz promować swoje interfejsy API raz, a następnie generalnie unikać dzwonienia pod numer Promise - dzwoniąc najwyżej .resolve.

+0

Dostaję błąd przez jsHint, mówiąc: "Redefinicja obietnicy", jakieś pomysły, jak ominąć ten błąd? – kamal0808

+0

@ kamal0808 ten problem z githubem traktuje twój problem w znacznym stopniu https://github.com/jshint/jshint/issues/1747 –