knex select 结果 return 到一个变量

knex select result return to a variable

我需要获取 knex select 查询结果到一个变量。

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 值。对于上面的代码,我得到的结果是 [ ] 对于第二个 (return inside callback) 我得到的结果是

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

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

并注意:return knex( returns Promise 对象给调用者, return dataArr returns 给调用者的值 .then()承诺条款。

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 所述),但我没有这样做,所以如果我尝试的话,我会弄乱语法。

干杯!加里