Angularjs 解决并问.All()问题
我正在尝试使用Angularjs 解决并问.All()问题,angularjs,angular-ui-router,angular-promise,Angularjs,Angular Ui Router,Angular Promise,我正在尝试使用ui路由器 $stateProvider .state('abc', { url: 'xyz', templateUrl: 'templateURL', controller: ctrl, resolve:{ data: function(someService){ data = someServic
ui路由器
$stateProvider
.state('abc', {
url: 'xyz',
templateUrl: 'templateURL',
controller: ctrl,
resolve:{
data: function(someService){
data = someService.init();
return data;
}
}
})
我的服务代码是这样的
var someObject = {
data1: ...,
data2: ....,
...
}
return{
init: function(){
promise1 = ...
promise2 = ...
promise3 = $http.get('someurl').then(function(){
...
...
//do some manipulation with someObj
return someObject;
});
$q.all(promise1 , promise2 ).then(promise3);
}
}
当我调试代码时,它将到达第行returnsomeobject
,但随后它没有解析
我做错了什么?您必须将回调函数传递给。然后(…)
。您的承诺3
为无
我怀疑你想这么做
return $q.all([promise1, promise2, promise3])
如果希望
promise3
仅在promise1
和promise2
之后执行,请尝试
return $q.all([promise1, promise2])
.then(function(arrayOfData) {
return promise3;
});
下面是一个例子来说明这一区别:
var promise1 = $timeout(function() {
return 'promise1Data';
}, 1000);
var promise2 = $timeout(function() {
return 'promise2Data';
}, 2000);
var promise3 = $timeout(function() {
return 'promise3Data';
}, 5000);
// This is what you're essentially doing when your route resolves
$q.all([promise1, promise2])
.then(promise3)
.then(function(data) {
console.log(data); // You get ["promise1Data", "promise2Data"]
});
// This is what I think you want
$q.all([promise1, promise2])
.then(function(arrayOfResolvedData) {
return promise3;
})
.then(function(data) {
console.log(data); // You get promise3Data
});
当然,您并没有从init函数返回承诺,那个么为什么要等待呢。它将立即解决我应该返回q吗?只要做
返回$q.all([promise1,promise2]),然后(promise3)代码>和resolve justreturn someService.init()
基本上所有3个承诺都应该得到解决,并且在我继续使用routePromise之前应该填充someObject。promise 3与承诺1和承诺2一样,返回$q。所有人([promise1,promise2,promise3])对不起我的错误。。。我做错了什么。。你的解决方案很好用。Thanks@AbhijithNagaraja:也许其中一个拒绝了?还是一个永远等待?