如何从承诺获取数据到主函数



我有函数:

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);
      }
    }
    );
   
});

相关内容

  • 没有找到相关文章

最新更新