我通常在使用Java。
我很困惑,曾经使用node.js进行编码。
环境:Express +猫鼬
当我尝试使用数据库中的数据时, 我通常使用dao-pattern编写代码。
如果我想从数据库的每个表中调用两个变量,
ex)
String title = user_dao.getData("title");
String code = book_dao.getData("code");
但是我知道节点不能以这种方式使用它。 当我如上所述调用两个变量时:
database.UserDaoModel.get(options, function(err, results) {
var title = results._doc.title;
database.BookDaoModel.get(options, function(err, book_results) {
var code = book_results._doc.code;
如您所见,我必须为BookDaoModel定义新行...以获取代码值。我认为这确实效率低下。上面的示例仅引入了两个数据,但是您知道我们需要通过5或6种方法添加更多功能吗?
有什么方法可以在节点中使用Java中使用的dao模式?
我不想使用每个回调来逐步获取数据。 如果尝试从三个表中获取三个数据中的每一个,则必须使用三个回调。
我想在一行中完成所有操作。
答案 0 :(得分:1)
您需要用promise来包装函数,例如:
function get(db,model,options){
return new Promise((res,rej) => {
db[model].get(options,(err,val) => {
if (err) rej(err);
res(val);
}
});
}
然后:
async function run(){
const results = await Promise.all([
get(database,"UserDaoModel",options),
get(database,"BookDaoModel",options)
]);
const title = results[0]._doc.title,
code = results[1]._doc.code;
}
您可以在Promise.all()中添加任意数量的get,并将它们添加到results数组中。 (我忘了说,但是当然,您需要调用run()函数)