Potrzebuję napisać kilka modułów, które ładują dane jeden raz, a następnie zapewniają interfejs dla tych danych. Chciałbym ładować dane asynchronicznie. Moja aplikacja już korzysta z obietnic. Czy daje obietnicę w wyniku wymagania modułu poprawnego wzorca/idiomu?Czy dostarczenie obietnicy jako eksportu modułu jest prawidłowym wzorcem inicjowania asynch w Node.js?
Przykład Moduł:
var DB = require('promise-based-db-module');
module.exports =
DB.fetch('foo')
.then(function(foo){
return {
getId: function(){return foo.id;},
getName: function(){return foo.name;}
};
});
Przykład użycia:
require('./myPromiseModule')
.then(function(dataInterface){
// Use the data
});
UPDATE:
Użyłem tego przez jakiś czas teraz i działa świetnie. Jedna rzecz, której się nauczyłem, a jest to zasugerowane w przyjętej odpowiedzi, jest to, że dobrze jest zachować pamięć podręczną samej obietnicy, a gdy chcesz uzyskać dostęp do danych, użyj next
. Przy pierwszym dostępie do danych kod zaczeka, aż obietnica zostanie rozwiązana. Późniejsze użycie next
spowoduje natychmiastowe przesłanie danych. na przykład
var cachedPromise = require('./myPromiseModule');
cachedPromise.then(function(dataInterface){
// Use the data
});
...
cachedPromise.then(function(dataInterface){
// Use the data again somewhere else.
});
Wygląda na to, że to działa dobrze dla mnie. – jfriend00
Tak, wydaje się idealnie w porządku. Jeśli korzystasz z modułów ES6, możesz nawet użyć synchronicznego modułu ładującego moduły i "importować" synchronicznie ". – Bergi
Czy odpowiedź poniżej rozwiązała Twój problem? Jeśli tak, proszę zaznaczyć najlepszą odpowiedź jako zaakceptowaną odpowiedź, zaznaczając zielony znacznik wyboru po lewej stronie tej odpowiedzi, aby wskazać społeczności, że pytanie zostało odebrane, a następnie zarówno ty, jak i osoba, która dostarczyła odpowiedź, zdobędziesz punkty reputacji które może prowadzić do zwiększenia uprawnień w StackOverflow. – jfriend00