AngularJs:如何以同步方式执行函数

时间:2015-09-01 08:49:21

标签: javascript angularjs synchronous

如何在AngularJS中以同步方式执行三个服务?我有三个$ http.get()服务,并且成功必须读取JSON字段,如果特定字段集具有有效数据,则必须将标志设置为true / false并根据标志结果提供下一个服务否则将被调用。但是在这里,服务是异步运行的,所以我的逻辑失败了。

Sample Code:
  // Condition 1
if(item === false) {
            var product = Service1.get().then(function (response) {

                    // Logic for reading the JSON

                        // Setting the flag based on it..
                        item = true/false;
                    }




           //Condition 2
            if(item === false) {
                var call = Service2.get().then(function (data) {
                       // Logic for reading the JSON

                        // Setting the flag based on it..
                        item = true/false;
                    }
            }

            // Condition 3
        if(item === false) {
            var product = Service3.get().then(function (response) {

                    // Logic for reading the JSON

                        // Setting the flag based on it..
                        item = true/false;
                    }
        }
    }   



 Here, the problem is that code in *Condition3* is getting executed first then code in *Condition1* and *Condition2* which is causing the unexpected results.
It would be of great help if someone has the sample code in which three services are executed in a sequential manner.

2 个答案:

答案 0 :(得分:1)

不是在成功处理程序中执行新的$http请求并写入级联请求,也许您可​​以以递归方式解决它:

function recursiveHttp(array) {
   $http(array[0].config).then(function() {
       array[0].success();
       recursiveHttp(array.splice(0,1));
    }, function() {
       array[0].error();
       recursiveHttp(array); //beware:  no escape clause
    });
}

数组是包含所需配置对象和两个回调函数的对象集合。

{
   config :  {
    method: 'get',
    url: 'myurl'
   },
   success: function() {
       //do stuff
   },  
   error: function() {
      //do stuff
   }
}

答案 1 :(得分:0)

有两种方法可以达到你想要的效果(据我可以从你的问题中得出):

  1. 使用async : true将$ http.get的行为更改为异步。

  2. 正确地链接您的请求,以便只在另一个之后执行,这样每个请求在开始执行之前都会满足它们的依赖关系。这可以通过在第一个回调函数上调用依赖函数来完成。