我在resolve方法中的一个变量具有另一个变量的依赖关系,是否可以在resolve方法中的变量之间共享相同的promise?
似乎$ route.current.locals存储已解析的变量,但是当处理var2时,$ route.current.locals为null,因为var1尚未解析。我试图做的是这样的事情:
$routeProvider.when('/report/:ruleId', { resolve: {
var1: ['$route', 'service', function ($route, service) {
return service.getRequest();
}],
var2: ['$route', 'service', function ($route, service) {
return service.getAnotherRequest($route.current.locals.var1.id);
}]
}});
答案 0 :(得分:4)
我希望这会奏效:
$routeProvider.when('/report/:ruleId', { resolve: {
vars: ['$route', 'service','$q' function ($route, service) {
var defer = $q.defer(),
data = [];
service.getRequest().then(function(firstResponse){
data.push(firstResponse);
service.getAnotherRequest(firstResponse.id).then(function(secondResponse){
data.push(secondResponse);
defer.resolve(data);
});
})
return defer.promise;
}],
}});
答案 1 :(得分:1)
我认为在这种情况下你最好的选择并不是完全承诺链接,更有希望嵌套。这会改变输出,但不会显着改变:
$routeProvider.when('/report/:ruleId', { resolve: {
bothVars: ['$route', '$service', function ($route, $service) {
return $service.getRequest().
then(function(response1) {
return $service.getAnotherRequest(response1.data.id).
then(function(response2) {
return {
var1: response1.data,
var2: response2.data
};
});
});
]
}});
如果你窝得太深,这会变得有点疯狂,但我认为这很好。我不喜欢这个解决方案,但它是我发现这个特殊问题的最好方法。最后一点注意事项:不要用“' $”'来表示自己的服务。 Angular为其自身的服务使用该约定来避免冲突。