我有功能:
function find(id){
var res = this.db.query(this.knex(this.table).where({id:id}).select().toString());
var props = {};
for(var c in res.rows[0]){
if(res.rows[0].hasOwnProperty(c))
props[c] = res.rows[0][c];
}
return this.newRecord(props);
}
this.db
这里是来自pg.Client
npm模块的pg
对象。 knex
也是一个npm模块,它构建了对postgresql数据库的查询。
它返回promise,我需要从这个promise中获取数据到main函数,从这个数据创建对象并返回它(newRecord
函数就可以了。)
我已经尝试安装节点版本7并使用await,但这没有用,因为如果函数有async
修饰符,那么它将返回带有return
之后的对象的promise,而我根本不需要这种行为。
所以,问题是我是如何等待该承诺完成并从中获取数据,有或没有async/await
或任何其他es6或es7功能?
答案 0 :(得分:0)
Pg客户端查询方法似乎是异步函数(因为主函数不等待查询将值返回到res然后继续进行)。那么,你应该做的是将回调函数传递给你的查询方法,如下所示 -
function find(id){
var res;
this.db.query(this.knex(this.table).where({id:id}).select().toString(), function(err, result) {
if(!err){
console.log("Result is - " + result);
res = result //if its an array, use res = result.splice();
var props = {};
for(var c in res.rows[0]){
if(res.rows[0].hasOwnProperty(c))
props[c] = res.rows[0][c];
}
return this.newRecord(props);
}
else {
console.error("Error occured -" + err);
}
}
);
});