【发布时间】:2018-06-23 23:07:38
【问题描述】:
我正在尝试创建一个实用服务,以帮助我团队中的其他开发人员执行特定查询,而无需打开和关闭连接。
这是我写的:
module.exports.connect = function(runner){
var connection;
return MongoClient.connect(url)
.then( conn => {
connection = conn;
var db = connection.db('looladb');
return db;
})
.then (db => runner(db))
.then (() => connection.close())
.catch(err => console.log('Error with mongo query', err));
}
这是使用模式:
mongoClient.connect(db => {
db
.collection("users")
.find({email: "shani@gmail.com"})
.toArray()
.then(out => console.log('db result', out))
})
这很好,但我希望使用模式是这样的 -
mongoClient.connect()
.then(db => {
db
.collection("users")
.find({email: "shani@gmail.com"})
.toArray()
.then(out => console.log('db result', out))
})
【问题讨论】:
-
在你的“使用模式”和“期望的使用模式”中,你都有
var result = db. ....,但是结果从来没有用于任何事情,它有什么意义 -
我将删除“结果”,但请记住,这就是我需要它作为承诺的原因,我想从调用者那里访问结果(例如,运行在后台使用的 getUsers实用程序)但是 get 的调用者可以定义应该对结果做什么
-
并不是说你必须删除任何东西,只是你提交代码的方式没有意义——这并不是说
var result可以在.then之外访问 -
如果你想要一个既能连接又能关闭的实用方法,那么你想做的任何数据库工作都必须夹在
.connect()和.close()之间。所以你必须传递要执行的工作 - 即runner。我认为没有任何逃避您希望避免的使用模式。
标签: javascript node.js mongodb promise