一尘不染

提供Promise作为模块的输出是否是Node.js中用于初始化初始化的有效模式?

node.js

我需要编写一些模块,一次加载数据,然后提供该数据的接口。我想异步加载数据。我的应用程序已经使用了Promise。是否由于需要模块而提供有效的模式/习惯?

示例模块:

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
});

更新:

我已经使用了一段时间了,效果很好。我已经了解到的一件事(在已接受的答案中得到了暗示)是,缓存承诺本身以及在每次访问数据使用时都很好then。第一次访问数据时,代码将等待直到承诺被解决。的后续使用then将立即返回数据。例如

var cachedPromise = require('./myPromiseModule');
cachedPromise.then(function(dataInterface){
  // Use the data
});
...
cachedPromise.then(function(dataInterface){
  // Use the data again somewhere else.
});

阅读 298

收藏
2020-07-07

共1个答案

一尘不染

对于一个模块来说,这似乎是一个完美的界面,该模块的任务是一次性读取某些数据。

数据是异步获取的,因此对此应有承诺。目标是只获取一次数据,然后让该模块使用的所有位置都可以访问该原始数据。一个诺言也很有效,因为它是一个记住其状态的一次性装置。

就我个人而言,我不确定为什么只可以直接访问属性时为什么需要getId()and getName()方法,但是两者都可以使用。

该接口的缺点是无法请求数据的新副本(从数据库中新加载)。

2020-07-07