【发布时间】:2016-12-22 15:30:18
【问题描述】:
在初始化我的控制器之前,我需要重新调用 2 个 http 调用,当前使用 Angular UI 路由器,并且我在 $stateProvider.state('stateName', {stateObject}) 下解析了我的 stateObject 下的映射,如下所示
$stateProvider.state('stateName', {
url : '/myURL',
params: {
data1: undefined,
data2 : undefined
},
resolve: {
dataTobeResolve : function($stateParams,$q) {
var deferred = $q.defer();
var deferredObj = {};
deferredObj.d1 = $q.defer();
deferredObj.d2 = $q.defer();
var result = {
data1: {},
data2: {}
}
if(angular.isDefined($stateParams.data1)) {
result.data1 = $stateParams.data1;
deferredObj.d1.resolve();
}
else {
httpCall().then(function(response) {
AsyncMethodCall(response.data).then(function(resolvedData) {
result.data1 = resolvedData;
deferredObj.d1.resolve();
});
});
}
if(angular.isDefined($stateParams.data2)) {
result.data2 = $stateParams.data2;
deferredObj.d2.resolve();
}
else {
AsyncMethodCall().then(function(resolvedData) {
result.data2 = resolvedData;
deferredObj.d2.resolve();
});
}
$q.all(deferredObj).then(function() {
deferred.resolve(result);
});
return deferred.promise;
}
}
});
尽管 deferredObj.d1 被解析,但是控制会转到 $q.all(deferredObj) 的 then(function(){}),这是出乎意料的行为,我相信 deferredObj 的所有承诺映射都应该在之前解析这条线被执行,我的控制器被初始化,尽管其中一个承诺被解决了
【问题讨论】:
标签: angularjs angular-ui-router angular-promise