AngularJS:一个承诺的多个'thens'

时间:2014-03-11 21:49:55

标签: angularjs promise

是否可以做这样的事情:

var citiesPromise = citiesService.getCities();
var usersPromise = usersService.getUsers();

citiesPromise.then(function(citiesResult) {
  // cities will load very quick, and I can do something with them
);

$q.all([citiesPromise, usersPromise]).then(function(results) {
  // users will probably load after cities, but both results must be available
);

换句话说,我需要一个将作为事件调度程序的承诺,并且对该承诺的每次'then'调用就好像事件监听器被添加到该承诺中一样。 当promise被解决或拒绝时,将通知所有事件侦听器。

这是否可以实现,或者在这种情况下应该只将'$ q.all'作为处理所有结果的单一点?

这样做我会得到什么?也许在这种情况下并不多,但如果我要进行10次或更多次ajax调用,那么如果页面逐渐加载会很酷,而不是浪费时间等待http请求......

2 个答案:

答案 0 :(得分:8)

你的代码看起来很不错。一切都完成后,$q.all()将执行一次。但是,所有then()函数将在它们所附加的promise被解析时执行。所以,多个then()函数是可以的,只要它们彼此独立。

这样做的好处是你想要的逐步页面加载。你可以让某些事情等待一切,但其他项目可能会开始起作用。

答案 1 :(得分:0)

只需从.then()函数内的citiesSerivce中返回捕获你的承诺,并从中返回一个承诺。

增益是您可以确保在页面完成加载或绑定到您希望在结果中的数据之前加载所有数据

相关问题