如何从函数中获取deferre.resolve?
我的控制器称之为:
service.getData().then(function(response){ //myFunc deferred response});
在服务中:
var _getData = function (){
$http.get(url).success(function(response){
deferred.resolve(_myFunc(response.Message)); // or just myFunc doesnt matter
});
return deferred.promise; //it returns in the end of the function
}
和myFunc也有:
$http.get(url).success(function(response){
deferred.resolve(response);
});
return deferred.promise; // also my Func is returning
所以我需要myFunc的延迟解析,在我的控制器中调用的另一个func中调用它并在那里显示
修改 我已经返回deferred.promise 但是它只返回SERVICE函数的第一个承诺而不是myFunc,我需要myFunc的承诺
编辑2
另请参阅卡森德雷克的回答,它并非反模式!
答案 0 :(得分:4)
如果你想简化if,你实际上可以将这两个变成一个链式调用。
var _getData = function(){
return $http.get(url).then(function(response1){
return $http.get(response1.data);
}).then(function(response2){
return response2;
});
<强>更新强> Plunkr
答案 1 :(得分:0)
您需要从工厂服务(无论您使用的是什么)返回defer.promise
var _getData = function (){
var deferred = $q.defer();
$http.get(url).success(function(response){
deferred.resolve(_myFunc(response.Message)); // or just myFunc doesnt matter
});
return deferred.promise;
}