我正在尝试按照此页面上的异步问题/指南,特别是“如果您未在代码中使用jQuery,这个答案适合您”的答案问题:How do I return the response from an asynchronous call?但我似乎无法获得返回var
的值。
function maxYvalue2(whendone) {
Rpt_scn_cost_v.find({
filter: {
where: {
scenario_id: $stateParams.id
}
}
}).$promise.then(function(response) {
var maxYvalue = 0
for (i = 0; i < response.length; i++) {
currMaxYvalue = parseFloat(response[i].cur_cost) + parseFloat(response[i].tgt_cost);
if (currMaxYvalue > maxYvalue) {
maxYvalue = currMaxYvalue
};
}
console.log("y3: " + maxYvalue)
whendone(maxYvalue);
return maxYvalue;
});
return maxYvalue;
};
function onComplete(maxYvalue1) {
mxVal = maxYvalue;
console.log("mx: " + mxVal)
return mxVal;
};
var yVal = maxYvalue2(onComplete);
console.log("fnc: " + yVal);
但是yVal
仍然显示为未定义...我按照上一个问题/答案但仍然无法获得指南中的输出....
我正在尝试遵循代码中提到的这种结构:
function onComplete(a){ // When the code completes, do this
alert(a);
}
function getFive(whenDone){
var a;
setTimeout(function(){
a=5;
whenDone(a);
},10);
}
然后像这样调用它:
getFive(onComplete);
我是否在参考问题中遵循了正确的回复部分?
答案 0 :(得分:2)
Promise不会使代码同步。您永远无法立即从maxYvalue2
返回值。只需返回承诺:
function maxYvalue2() {
return Rpt_scn_cost_v.find({filter: { where: {scenario_id: $stateParams.id}}}).$promise.then(function(response){
var maxYvalue = 0
for (var i=0;i<response.length;i++) {
var currMaxYvalue = parseFloat(response[i].cur_cost) + parseFloat(response[i].tgt_cost);
if (currMaxYvalue > maxYvalue) {
maxYvalue = currMaxYvalue
};
}
console.log("y3: " + maxYvalue)
return maxYvalue;
});
}
maxYvalue2().then(function onComplete(yVal) {
console.log("fnc: " + yVal);
});