2016-12-25 50 views
0

是呼叫服务“flightPricerequest”如何将服务转化为异步服务在下面angularjs

$scope.flight.blockNow= function(offer,metaData){ 
    SearchFlightsServices.flightPricerequest($scope,offer,metaData); 
} 

这里是我的服务功能:

var flightPricerequest=function($scope,offer,metadata){ 
    var url = webroot + 'flights/pricerequest'; 
    $scope.data = { 
     "type"    : "json", 
     "Search_cretaria" : $scope.flight.search, 
     "selectedOffer"  : offer, 
     "Metadata"   : metadata, 
     "EchoToken"   : $scope.flight.EchoToken 
    }; 

    $http.post(url, $scope.data).success(function(data, status, headers, config) { 
    if(data.Error){ 
     $scope.flight.error=data.Error; 
     $scope.sendErrorMessage($scope.flight.error); 
     return false; 
    }else{ 
     if(data == true){ 
      window.location = webroot+"flights/book"; 
     } 
    } 

    }).error(function(data, status, headers, config) {});  
} 

我想这种服务转化为异步服务,所以在执行服务时,我可以退出请求,如刷新页面应停止服务,现在所有操作都在服务完成后发生。

回答

0

您可以使用承诺..

var flightPricerequest=function($scope,offer,metadata){ 
    var def= $q.defer(); 
    var url = webroot + 'flights/pricerequest'; 
    $scope.data = { 
     "type"    : "json", 
     "Search_cretaria" : $scope.flight.search, 
     "selectedOffer"  : offer, 
     "Metadata"   : metadata, 
     "EchoToken"   : $scope.flight.EchoToken 
    }; 

    $http.post(url, $scope.data).success(function(data, status, headers, config) { 
    if(data.Error){ 
     def.reject(); 
    }else{ 
     if(data == true){ 
      def.resolve(); 
     } 
    } 

    }).error(function(data, status, headers, config) { 
    def.reject(); 
    }); 

    return def.promise;  
} 

现在请为

$scope.flight.blockNow= function(offer,metaData){ 
     SearchFlightsServices.flightPricerequest($scope,offer,metaData) 
.then(function success(){ 
     window.location = webroot+"flights/book"; 
     } , 
     function err(){ 
     $scope.flight.error=data.Error; 
     $scope.sendErrorMessage($scope.flight.error); 
    }); 
} 

不要忘了注入$q的依赖。

您可以阅读更多有关承诺..

https://docs.angularjs.org/api/ng/service/ $ Q

http://andyshora.com/promises-angularjs-explained-as-cartoon.html

+0

它仍然没有工作对我来说,如果我在其他的链接点击,而HTTP的执行也不会工作 – Pravin