Angular:如何使一个异步函数先执行

时间:2016-06-09 08:46:59

标签: javascript angularjs

我有一个保存功能,我需要调用另一个函数来获取修订号。并且正在进行api通话。因为两者都是异步的。如何使一个函数等待其他执行

$scope.getRevision = function(callback){
    Api.Product.querymyProdById({ prodId: $scope.editProdId }).$promise.then(function(result) {
        if (result && result.length>=1 && result[0].effectiveDate != $scope.editProdmyDate) {
            $scope.editProdRevision = result && result[0].revision +1;
            callback();
        } else {
            $scope.editProdRevision = 100;
        }
    });
}

$scope.saveProd = function(){
     $scope.getRevision(function(){});

     Api.Product.save({
        id: $scope.ProdId;
        revision:$scope.editProdRevision
         -some code

}

上面的代码我想确保在获得prodRevision之前不应该调用save api。

有什么建议吗?

3 个答案:

答案 0 :(得分:5)

既然你有承诺就不要乱用回调。让你的函数实际返回一个promise并使用then来链接调用。

$scope.getRevision = function(){
    return Api.Product.querymyProdById(..).$promise...;
}

$scope.saveProd = function() {
   return $scope.getRevision().then(function() {
        return Api.Product.save(...);
   })
}

答案 1 :(得分:1)

这正是javascript神为

发明了回调
$scope.saveProd = function(){
     $scope.getRevision(function(){
        // this happens after getRevision finished
        Api.Product.save({
           id: $scope.ProdId;
           revision:$scope.editProdRevision
            -saome code
        });
     });

}

答案 2 :(得分:0)

你可以简单地在另一个之后做一个异步调用,比如这个 -

// First Simple GET request example:
$http({
  method: 'GET',
  url: '/someUrl'
})
.then(function successCallback(response) {
  // this callback will be called asynchronously
  // when the response is available
  // Second Simple GET request example:
   $http({
     method: 'GET',
     url: '/someUrl'
   })
   .then(function successCallback(response) {

   }, function errorCallback(response) {

   });
}, function errorCallback(response) {
  // called asynchronously if an error occurs
  // or server returns response with an error status.
});