如何在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.
答案 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)
有两种方法可以达到你想要的效果(据我可以从你的问题中得出):
使用async : true
将$ http.get的行为更改为异步。
正确地链接您的请求,以便只在另一个之后执行,这样每个请求在开始执行之前都会满足它们的依赖关系。这可以通过在第一个回调函数上调用依赖函数来完成。