角度控制器同步

时间:2015-04-22 05:43:40

标签: angularjs

在下面的代码中,控制器没有调用第三个$http.get()调用,而是直接进入结束。

我想执行所有$http.get()次请求。在我的代码中,第三个$http.get()取决于第二个$http.get()结果。此外,第二个$http.get()取决于第一个$http.get()结果。

代码

有没有人知道为什么没有调用第三个$http.get()

2 个答案:

答案 0 :(得分:1)

根据您构建代码的方式,下面的代码将在第三个$ http.get

之前运行
orderDetails['orderData'] = data;
orderDetails['kitNames'] = kitNames;
orderDetails['proteins'] = proteins;
orderDetails['dietaries'] = dietaries;
orderDetails['ingredients'] = ingredients;

你必须将它放在第三个$ http.get和依赖它的所有其他代码中,这应该可以解决你的挑战

此外,您的代码可以重构,因此您阅读

更具可读性和易懂性

答案 1 :(得分:0)

建议: -

实际上这是angular http调用的一个大问题,因为http调用不支持 async:false

请参阅本讨论中的答案:Angularjs $http VS jquery $.ajax

您的代码在内部方法中调用新的http方法看起来像很多混淆

你的代码看起来不像标准格式也会造成很多混乱。

因此,如果您在某天之后更改此文件中的任何代码,那么您需要在您的眼睛中放置一个显微镜玻璃,并逐一看到。它需要更多次。因此,请仅针对此类情况避免http调用。

解决方案: -

避免使用http来电,请Ajax使用async:false选项进行呼叫

代码看起来像

$.ajax({
    type:       "GET",
    dataType:   "Json",
    url:        'Your URL',
    **async:      false,**

    success: function (returndata, status, jqxhr) {
        $(this).html(returndata).hide().fadeIn();
    }).fail(function() { 
        alert("error"); 
    })
});

Explanation About Async:false

  

将async设置为false意味着您调用的语句必须在调用函数中的下一个语句之前完成。如果设置async:true,则该语句将开始执行,并且无论异步语句是否已完成,都将调用下一个语句。