2017-10-14 31 views
1

在我的工廠中,我撥打了服務電話。如果我從該調用中得到響應,我想在控制器中執行一個操作(即調用函數doAction())。 雖然我需要一些幫助。由於我的代碼現在正在工作,即使服務調用失敗,它也會在控制器中執行操作。

如果服務調用失敗,代碼會進入工廠的Catch部分,但仍返回到控制器,以便達到doAction() - 方法。

我該如何避免這種情況?謝謝你的時間,並原諒一個可能的愚蠢問題。我對Angular很新穎。

在我廠:

app.factory('myFactory', function ($http) { 
    return { 

     callService: function() { 
      return $http.post("http://xxxxx", {}, {headers: {'Content-Type': 'application/x-www-form-urlencoded'}}) 
       .then(function(response) { 
        return response.data; 
       }) 
       .catch(function(response) { 
        console.error(response.status, response.data); 
       }); 
     }, 
    }; 
}); 

在我的控制器:

var app = angular.module('indexapp', ['ngRoute']); 

app.controller('indexController', function($scope, myFactory) { 

    $scope.makeServiceCall = function() { 
     var data = myFactory.callService(); 
     data.then(function (result) { 
      doSomeAction(); 
     }); 
    };  
}); 

回答

2

這是因爲捕捉異常,你實際上吞嚥。你或者不需要在你的工廠發現錯誤,或者重新拋出這樣的錯誤:

app.factory('myFactory', function ($http) { 
    return { 

     callService: function() { 
      return $http.post("http://xxxxx", {}, {headers: {'Content-Type': 'application/x-www-form-urlencoded'}}) 
       .then(function(response) { 
        return response.data; 
       }) 
       .catch(function(response) { 
        console.error(response.status, response.data); 
        throw response; // <-- rethrow error 
       }); 
     }, 
    }; 
}); 
+0

謝謝。您的解決方案都可以工 – chichi

2

返回promise從廠家售後服務。

廠:

app.factory('myFactory', function ($http) { 
    return { 

     callService: function() { 
      return $http.post("http://xxxxx", {}, {headers: {'Content-Type': 'application/x-www-form-urlencoded'}});      

    }; 
}); 

控制器

var app = angular.module('indexapp', ['ngRoute']); 

    app.controller('indexController', function($scope, myFactory) { 

     $scope.makeServiceCall = function() { 
      var data; 
      myFactory.callService().then(function(response) { 
        data = response.data; 
        doSomeAction(); 
       }) 
       .catch(function(response) { 
        console.error(response.status, response.data); 
       }); 
     };  
    }); 
+0

我已經嘗試過這之前(或類似的東西)。我會再試一次,因爲我認爲這將是一個很好的解決方案。 – chichi

+0

@chichi告訴我你收到了什麼錯誤? –