2016-05-30 133 views
0

如何實現承諾的功能,所以我可以擺脫超時,如果它甚至有可能?我正從工廠的一些數據「普里姆」,函數查找的喜歡:函數的承諾,angularjs

$scope.getPre = function(id){ 

var url = WEB_API.MainUrl + '/api/prim/' + id +'/' + $window.sessionStorage.getItem('idsom'); 

    Prim.getprim(function(data) { 

     $scope.prim1 = data; 
     $scope.prim = $scope.prim1[0]; 

    }, url); 

    $scope.$apply(); 

} 

,我想擺脫掉超時:

setTimeout(function() { // it can't work without timeout 
    $scope.getPre($routeParams.idprim); 
}, 100); 
+1

使用回調,它會更清潔 –

+0

只有選項是承諾,有更多的超時項目,我必須改變承諾,如果我使用回調它將是不可讀和更復雜 – Mark

+1

var promise = new Promise( (res,rej)=> {foo(/ * callback */res); (')=>/*其中'foo'是異步的東西,你需要等待一個回調,然後在代碼的其他地方,你有'setTimeout's而不是'promise.then(()=>/*。 .. * /);' –

回答

0

你的函數返回一個承諾,所以你可以使用.then()它:

$scope.getPre = function(id){ 
    var deferred = $q.defer() 
    var url = WEB_API.MainUrl + '/api/prim/' + id +'/' + $window.sessionStorage.getItem('idsom'); 

    Prim.getprim(function(data) 
     $scope.prim1 = data; 
     $scope.prim = $scope.prim1[0]; 
     deferred.resolve(); 
    }, url); 

    return deferred.promise; 
} 

,然後只用這樣的:

$scope.getPre($routeParams.idprim).then(function() { 
    // Do whatever you did after setTimeout 
});