knex选择结果返回变量

时间:2018-02-01 08:20:46

标签: javascript node.js knex.js

我需要knex选择查询结果到变量。

function getUserPlanDetailsWithOutCb(user_id) {
 var dataArr =[];
 knex('user_plans').select('*').where({ 'user_id': user_id }).then(function(result) {
     result.forEach(function(value) {
        dataArr.push(value)
     });
 //return dataArr;
 });
 return dataArr;
}

 var result = getUserPlanDetailsWithOutCb(12);

我在knex的回调内外尝试了返回值。对于上面的代码,我得到的结果为 [] 对于第二个(return inside callback),我得到了结果

{
   "isFulfilled": false,
   "isRejected": false
}

1 个答案:

答案 0 :(得分:1)

要使用Promises返回变量,请对数据检索功能执行以下操作:

并注意:return knex(将Promise对象返回给调用者,return dataArr将值返回给调用者的.then() promise子句。

function getUserPlanDetailsWithOutCb(user_id) {
  var dataArr =[];
  return knex('user_plans').select('*')
     .where({ 'user_id': user_id })
     .then(function(result) {
         result.forEach(function(value) {
            dataArr.push(value)
         });
         return dataArr;
     });
}

通过以下方式调用该功能:

var result;
var aPromise = getUserPlanDetailsWithOutCb(12)
    .then(function(result) {
        result = value;
    });

result结算时将设置aPromise变量。

使用var aPromise调用函数将导致程序执行在Promise完成并设置result之前继续,这可能不是您想要的。所以你可以使用await代替(@Abhyudit Jain备注),但我还没有这样做,所以如果我尝试的话,我会为你弄乱语法。

干杯!加里。