使用$ q服务和Angular,我编写了一个异步获取数据的函数。下面的示例有点简化,但与我的生产代码类似:
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中做到这一点?
用途$q.all
:
$q.all({ data1: fetchData(1), data2: fetchData(2), data3: fetchData(3) }).then(function(d){ doSomething(d.data1, d.data2, d.data3); });