knex选择结果返回到变量

res*_*hma 1 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);
Run Code Online (Sandbox Code Playgroud)

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

{
   "isFulfilled": false,
   "isRejected": false
}
Run Code Online (Sandbox Code Playgroud)

Gar*_*ryL 5

要使用 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;
     });
}
Run Code Online (Sandbox Code Playgroud)

通过以下方式调用该函数:

var result;
var aPromise = getUserPlanDetailsWithOutCb(12)
    .then(function(result) {
        result = value;
    });
Run Code Online (Sandbox Code Playgroud)

result变量将在解析时设置aPromise

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

干杯! 加里.