在angalrjs中使用两个异步调用

Work with two asynchronous calls in angualrjs?

本文关键字:两个 异步 调用 angalrjs      更新时间:2023-09-26

我目前对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")。但目前我有alert("Complete")之前的alert("AsyncFunc2 Complete");

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

$q.all需要一个promise数组

例子
 $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);
  }
})();