我正在从AngularJS中的控制器进行调用,该控制器将数据传递给服务以获取响应,然后我需要检查条件。
控制器
patents.forEach(function(item){ //patents is resolved in a router file which returns a number of items from a request
item.renewalProgress = patentsService.phaseProgress(item);
})
服务
factory.phaseProgress = function(item) {
var progress = function(item)
factory.fetchCostAnalysis(phase.id)
.then(
function(response){
var progress;
switch(response.currentcostBand) {
case 'Green':
progress = 0;
break;
case 'Amber':
progress = 20;
break;
case 'Red':
progress = 40;
break;
case 'Blue':
progress = 60;
break;
case '
progress = 80;
}
return progress
}, function(errResponse){
console.log('no')
}
)
return progress;
}
该值将以未定义的形式返回。
问题
如何从服务向控制器返回值?如果有人能提出更好的方法吗?
答案 0 :(得分:1)
在您的服务中,您有一个返回promise的异步函数,
这意味着当您到达该部分时,您的流程将继续,then()
中的部分代码将在稍后执行。
如果您希望等待执行承诺,可以使用AngularJS中的Deffer。
阅读AngularJS承诺: promises-in-angularjs-the-definitive-guide