![](/img/trans.png)
[英]AngularJS - rejected $http promise with $routeProvider:resolve
[英]Using promise chaining in resolve feature of $routeProvider
我在resolve方法中的一个变量与另一个变量相关,是否可以在resolve方法中的多个变量之间共享相同的promise?
似乎$ route.current.locals存储了已解析的变量,但是当处理var2时,由于尚未解析var1,因此$ route.current.locals为null。 我想要的是这样的:
$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);
}]
}});
我希望这会起作用:
$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;
}],
}});
我认为在这种情况下,您的最佳选择不是完全承诺链,而是更多的承诺嵌套。 这将更改输出,但不会显着改变:
$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对自己的服务使用该约定以避免冲突。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.