我有函数:
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
npm 模块pg.Client
对象。 knex
也是一个 npm 模块,它会构建对 postgresql databse 的查询。它返回 promise,我需要从这个 promise 获取数据到 main 函数,从这些数据创建对象并返回它(newRecord
函数这样做(。
我已经尝试安装节点版本 7 并使用 await,但这无济于事,因为如果函数有async
修饰符,那么它将返回 promise 与 return
之后的对象,我根本不需要这种行为。
因此,问题是我如何等待该承诺完成并从中获取数据,无论是否具有async/await
或任何其他 es6 或 es7 功能?
Pg Client Query 方法似乎是异步函数(因为 main 函数没有等待查询将值返回给 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);
}
}
);
});