2016-05-10 88 views
0

我希望service(MyService.postData)只有在工廠功能(MyFactory.getData)中的所有功能都結束後才能調用。等待工廠響應,然後繼續服務調用

從工廠的返回值始終是虛假的或不確定的,我得到一個錯誤的發送服務電話:

首先我調用一個函數定義工廠,通過用於登錄的用戶一個彈出模板

2.其次,只有當用戶登錄時,下面的服務的通話將被製成:

//My AngularJS controller is something like 
    myApp.controller("firstCtrl", function($scope, MyFactory, MyService) { 
     $scope.value = MyFactory.getData(); 
     if($scope.value){ 
      MyService.postData("url",params).then(function(){ 
       //do something 
      }); 

    }); 

    //My AngularJS factory is something like 
    myApp.factory("MyFactory",function(){ 
     return { 
      getData: function(){ 
       //open pop up to login 
       //close pop up get confirmation 
       return true; 
      } 
    }); 

    //My AngularJS service is something like 
    myApp.service("MyService",function($http){ 
    //do something 
    }); 
+0

中的getData在出廠前,應根據承諾,。然後,您可以將調用MyService.postData移動到其後面的塊中。 – rivarolle

回答

0

您使用$http嗎?

myApp.factory("MyService", ["$http", function($http){ 
    return { 
     getData: function(url) { 
      return $http.get(url); 
     }, 
     postData: function(url, payload) { 
      return $http.post(url, payload); 
     } 
    }; 
}]); 

然後

myService.getData(url).then(function(response) { 
    var payload = { 
     item: response.data.someItem; 
    }; 
    var url2 = '/path/to/somewhere/'; 

    myService.postData(url2, payload).then(function(response) { 
     alert('ok'); 
    }).catch(function(response) { 
     alert('error2'); 
    }); 
}).catch(function(response) { 
     alert('error1'); 
}); 
+0

不,我在我的工廠沒有使用http,我的所有服務電話都來自服務。 – twitch

+0

爲什麼'postData()'和'getData()'住在兩個不同的地方? – Kyle

+0

獲取數據只是一個隨機的名字想象它,因爲它檢查登錄打開一個流行音樂就是它。整個邏輯是在一個不同的控制器。我的工廠只存儲和更新值。另一方面,我的服務完成所有的服務 – twitch

相關問題