【问题标题】:Work with two asynchronous calls in angualrjs?在 angularjs 中使用两个异步调用?
【发布时间】:2015-11-28 22:45:55
【问题描述】:

我目前对 angularjs 的 Promise 概念很陌生,发现自己陷入了异步金字塔中。

这种情况是一个异步函数,它在成功时调用另一个异步函数 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("AsyncFunc2 Complete") 之前有 alert("Complete");

【问题讨论】:

  • return self.AsyncFunc2();,同时将success更改为then

标签: javascript angularjs asynchronous angular-promise


【解决方案1】:

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

$q.all 需要一组承诺。

例子

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

编辑 好的!既然如此,那么您可以在第二个顺序功能解决后使用 then 。根据您的解释,这是我的理解。

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

})();

【讨论】:

  • $q.all() 并行工作,但我希望它是顺序的。
  • 试试这个。我希望这就是您所说的通过承诺顺序执行 $http 调用的意思。
猜你喜欢
  • 2014-12-10
  • 2015-05-10
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多