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)
要使用 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 所说),但我还没有这样做,所以如果我尝试的话,我会弄乱你的语法。
干杯! 加里.