【发布时间】:2016-03-16 19:01:15
【问题描述】:
使用 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 中做到这一点?
【问题讨论】:
-
你想要$q.all。本质上,你将每一个 Promise 推入一个数组,然后在数组上调用
$q.all。
标签: angularjs asynchronous promise angular-promise