Node.js数据库初始化来自多个模块

时间:2015-09-21 11:07:45

标签: javascript node.js asynchronous rethinkdb

我在项目中有3个模块:A,B,C;所有这些都使用Rethinkdb,它需要在初始化时进行异步r.connect调用。

我试图从命令行从模块A到B进行呼叫;但是,尽管在require()上启动r.connect,但B无法提供此服务,因为在模块A调用时,rethinkdb尚未加载。

这个代码可以以什么方式重构,这样我才能在调用B之前确保所有初始化都完成?

我试图使用闭包来传递模块周围的状态;但是,由于r.connect仅作为异步函数可用,因此采用以下形式:

r.connect( config.rethinkdb, function(err, connection)  {
    rconn = connection;
    // all module requires
    require("./moduleB")(rconn);
    require("./moduleC")(rconn);

    ...lotsacode...
});

哪种感觉非常错误。还有更好的建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用promise,并传递连接。像这样的东西

r.connect(config.rethinkdb)
.then(function(connection) {
  //do some stuff here if you want
  initWholeApp(connection)
})

initWholeApp内部连接,您可以放置​​应用程序代码。

您甚至可以将其简化为

r.connect(config.rethinkdb)
.then(initWholeApp)

initWholeApp是一个接受参数作为建立连接的函数。

除此之外,您甚至可以在完成该查询后运行连接上的每个查询(只需确保关闭连接),或者使用带有支持它的驱动程序的RethinkDB连接池,例如{{3或者滚动你自己。