在下面的代码中,控制器没有调用第三个$http.get()
调用,而是直接进入结束。
我想执行所有$http.get()
次请求。在我的代码中,第三个$http.get()
取决于第二个$http.get()
结果。此外,第二个$http.get()
取决于第一个$http.get()
结果。
代码
有没有人知道为什么没有调用第三个$http.get()
?
答案 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");
})
});
将async设置为false意味着您调用的语句必须在调用函数中的下一个语句之前完成。如果设置async:true,则该语句将开始执行,并且无论异步语句是否已完成,都将调用下一个语句。