在angualrjs中使用两个异步调用?

时间:2015-09-03 07:49:18

标签: javascript angularjs asynchronous angular-promise

我目前对angularjs的承诺概念是新的,并且发现我的自我陷入了异步金字塔。

情况是一个异步函数,它在成功时调用另一个异步函数2。一旦两个函数完全执行,所需的输出就是执行一些操作。

// Inside Controller    
         ServiceName.AsyncFunc1().then(function(){
               alert("Complete");     
         })


// Inside Service    
            app.service('ServiceName', function ($http) {
            return {
                AsyncFunc1 : function()
                {
                       var self = this;
                       return $http.post(url).
                       success(data)
                       {
                            self.AsyncFunc2();
                       }
                },
                AsyncFunc2 : function()
                {
                       return $http.post(url2).
                       success(data)
                       {
                            alert("AsyncFunc2 Complete");
                       }
                },
          }
    });

现在,我想在两个顺序异步调用完成时调用alert(“Complete”)。 但目前我在警报之前有警报(“完成”)(“AsyncFunc2 Complete”);

1 个答案:

答案 0 :(得分:0)

如果您希望在两个函数都返回承诺时发出警报消息,那么您可以使用$q.all

$q.all需要一系列承诺。

实施例

 $q.all([function1(), function2()])

修改的 好!就是这种情况,那么你可以在第二个顺序函数解决后再使用。根据你的解释,这就是我的理解。

(function(){
  angular
    .module('myApp')
    .controller('MyController', MyController);


  function MyController(myService) {

    function secondASyncSuccess() {
      alert("second function is done");
    }

    function firstFuncSuccess() {
     alert("First func is done");
      myService.secondASyncFunction()
        .then(secondASyncSuccess, secondASyncFailure);
    }

    myService.firstASyncFunction()
      .then(firstFuncSuccess, firstFuncFailure);
  }

})();