【发布时间】:2014-01-14 01:51:47
【问题描述】:
$resource 承诺是否应该与 $q 兼容?也许我用错了。我有两个 $resource 对象,我可能会像这样加载:
$rootScope.foos = Res1.query(); // [ foo1, foo2...]
$rootScope.bars = Res2.query(); // [ bar1, bar2...]
当两个(并且只有两个)查询都到达时,我需要广播一个事件。所以我像这样使用 $q.all:
$q.all([$rootScope.foos.$promise, $rootScope.bars.$promise])
.then(function(){
// sometimes $rootScope.bars == []
$rootScope.$broadcast('foos_and_bars!');
});
事件监听器发现 $rootScope.bars 为空/[](一秒钟后它有数据)
更新以响应@Daiwei 和@ExpertSystem
好的,这是 JSFiddle:Reproducing JSFiddle
控制台显示 $q.all() 在 promise 被解决之前被返回。我想要么是使用错误,要么是与 [$resource, $scope, $http, etc.] 中的任何一个有关的角度错误...
【问题讨论】:
-
可以把相关代码发到
Res1.query()吗? -
这应该可以正常工作。你能准备一个小提琴或 SSCCE 来重现这个问题吗?
-
@ExpertSysterm 好的,我们开始,很好地重现:jsfiddle.net/mJ9xx/3
标签: javascript angularjs promise