如何让服务跟踪其他服务的多个子句

时间:2013-11-18 17:20:17

标签: angularjs

我希望只有当来自其他服务的3个或更多异步事件成功完成时才会返回true,并且只要其中一个失败,就会返回false。

基本上和整个应用程序的“isReady”。 例如,在登录+获取一些用户数据+获取一些其他用户数据之后就是如此。

我怎样才能做到这一点,然后从这个服务中收听的所有相关服务调度事件,并执行cond1 && cond2 && cond3之类的操作?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用all服务的$q方法,它采用一系列承诺并将其转换为一个独特的承诺。

Documentation for $q

在您的情况下,您有3个不同的服务进行3次异步调用。所以你需要在你的控制器中使用这样的东西:

$q.all([service1.data(), service2.data(), service3.getData()]).then(function (data) {
    $scope.data = data;
}, function (err) {
    $scope.data = "Something failed...";
});

有关详细信息,请check this Plunkr