在Angular中使用$ q服务,我编写了一个异步获取数据的函数。下面的示例有点简化,但与我的生产代码类似:
DataService.fetchData(1)
.then(function (data1) {
this.data1 = data;
DataService.fetchData(2)
.then(function (data2) {
this.data2 = data2;
DataService.fetchData(3)
.then(function (data3) {
this.data3 = data3;
doSomething(this.data1, this.data2, this.data3);
}, function () {
alert("failure getting data 3");
})
}, function () {
alert("failure getting data 2");
});
}, function () {
alert("failure getting data 1");
});
假设我需要进行三次异步函数调用来获取数据,如上所述。然后通过Angular视图显示数据。
但是,上面的代码存在很大缺陷。它很难阅读,函数调用是深层嵌套的。我想写一些类似的东西,它将使三个异步函数调用并执行一些函数来处理数据,只有在所有三个函数完成后,如果出现错误,应该只有一个错误处理函数。
还应该注意,不知道函数将返回其异步数据的顺序。
我如何在Angular中执行此操作?
答案 0 :(得分:4)
使用$q.all
:
$q.all({
data1: fetchData(1),
data2: fetchData(2),
data3: fetchData(3)
}).then(function(d){
doSomething(d.data1, d.data2, d.data3);
});