Java 角度路由解析器中对同一服务的两个资源调用
我有一个控制器,它在加载路由之前有一个解析器。我的解析器设置两个常量:viewA和viewB。这两个常量都是通过调用同一服务上的两个不同端点来设置的。该服务调用同一个db,根据我传递的id重设数据 角度模块Java 角度路由解析器中对同一服务的两个资源调用,java,angularjs,multithreading,Java,Angularjs,Multithreading,我有一个控制器,它在加载路由之前有一个解析器。我的解析器设置两个常量:viewA和viewB。这两个常量都是通过调用同一服务上的两个不同端点来设置的。该服务调用同一个db,根据我传递的id重设数据 角度模块 angular.module("ModuleA", ["ngRoute"]) .config(["$routeProvider", "moduleResolver", function ($routeProvider, moduleResolver) {
angular.module("ModuleA", ["ngRoute"])
.config(["$routeProvider", "moduleResolver",
function ($routeProvider, moduleResolver) {
$routeProvider
.when('/route1', {
templateUrl: 'route1.html',
controller: "route1Ctrl",
resolve: moduleResolver
})
.when('/route2', {
templateUrl: 'route2.html',
controller: "route2Ctrl",
resolve: moduleResolver
})
}])
angular.module("ModuleA")
.service('moduleService', ['$q', '$resource',
function ($q, $resource) {
this.getResource= function (resourceToCall) {
var defer = $q.defer();
$resource("url based on resourceToCall passed in", {}, {})
.get({}, function (result) {
defer.resolve(result);
},
function (result) {
defer.reject(result);
});
return defer.promise;
}
this.mapResourceToViewA = function() {
//map result from resource call to view model for View A
}
this.mapResourceToViewB = function() {
//map result from resource call to view model for View B
}
}]);
解析器
angular.module("ModuleA")
.constant("moduleResolver", {
"viewA": ["moduleService", function(moduleService) {
return moduleService.getResource("resourceA")
.then(moduleService.mapResourceToViewA);
}],
"viewB": ["moduleService", function(moduleService) {
return moduleService.getResource("resourceB")
.then(moduleService.mapResourceToViewB);
}]
});
服务
angular.module("ModuleA", ["ngRoute"])
.config(["$routeProvider", "moduleResolver",
function ($routeProvider, moduleResolver) {
$routeProvider
.when('/route1', {
templateUrl: 'route1.html',
controller: "route1Ctrl",
resolve: moduleResolver
})
.when('/route2', {
templateUrl: 'route2.html',
controller: "route2Ctrl",
resolve: moduleResolver
})
}])
angular.module("ModuleA")
.service('moduleService', ['$q', '$resource',
function ($q, $resource) {
this.getResource= function (resourceToCall) {
var defer = $q.defer();
$resource("url based on resourceToCall passed in", {}, {})
.get({}, function (result) {
defer.resolve(result);
},
function (result) {
defer.reject(result);
});
return defer.promise;
}
this.mapResourceToViewA = function() {
//map result from resource call to view model for View A
}
this.mapResourceToViewB = function() {
//map result from resource call to view model for View B
}
}]);
我尝试在冲突解决程序中执行这些调用时出错。我是否需要调用$digest()来解析第一个调用,或者它触发下一个调用。我应该链接解析程序中的资源调用吗。我不想这样做,因为从技术上讲,它们是两个独立的模型,我想保持独立,而且我不想改变映射方法来回报承诺。在这么长的描述之后,您不能错过相关的细节,错误是什么?这是第二次资源调用获取resourceB返回的500服务器错误,但是,当我从浏览器url执行相同的调用时,资源调用工作正常。我是否丢失了客户端上的某些内容并破坏了服务器。我使用并行测试套件进行了soapUI测试,服务器似乎可以处理并行请求。你知道当我从客户端触发多个调用时,它似乎不起作用吗?你应该看到你调用的结构是失败的,并且运行良好。可能发送的内容不正确。已修复该问题。这是服务器端的问题。被触发的java服务随后启动了另一个HTTP客户端连接。java服务未配置为处理多个连接。我们最终使用了PoolgClientConnectionManager类,解决了这个问题。