Мне нужно написать несколько модулей, которые загружают данные один раз, а затем предоставляют интерфейс для этих данных. Я хотел бы загрузить данные асинхронно. В моем приложении уже используется promises. Обеспечивает обещание в результате требования к модулю действительного шаблона/идиомы?
Пример модуля:
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;}
};
});
Пример использования:
require('./myPromiseModule')
.then(function(dataInterface){
// Use the data
});
UPDATE:
Я использовал это какое-то время, и он отлично работает. Одна вещь, которую я узнал, и она намекала в принятом ответе, заключается в том, что хорошо кэшировать само обещание и всякий раз, когда вы хотите получить доступ к данным, используйте next
. При первом доступе к данным код будет ждать разрешения обещания. Последующее использование next
немедленно вернет данные. например.
var cachedPromise = require('./myPromiseModule');
cachedPromise.then(function(dataInterface){
// Use the data
});
...
cachedPromise.then(function(dataInterface){
// Use the data again somewhere else.
});