Javascript 无法在循环中调用NodeJs服务器上的服务
我的应用程序由前端(AngularJS)和后端(nodejs)组成。我在一个列表中有10个id,我想迭代这些列表,每次迭代都需要将id传递给服务器(node js)并将数据返回前端。我可以从控制台日志中看到,angular代码正在进行所有10个调用,但node js服务器代码只处理第一个请求。有什么解决办法吗。我是节点Js的乞丐 前端角js代码:Javascript 无法在循环中调用NodeJs服务器上的服务,javascript,angularjs,node.js,node-modules,Javascript,Angularjs,Node.js,Node Modules,我的应用程序由前端(AngularJS)和后端(nodejs)组成。我在一个列表中有10个id,我想迭代这些列表,每次迭代都需要将id传递给服务器(node js)并将数据返回前端。我可以从控制台日志中看到,angular代码正在进行所有10个调用,但node js服务器代码只处理第一个请求。有什么解决办法吗。我是节点Js的乞丐 前端角js代码: var getRMPDetails = function() { var inputJson; for (var i = 0; i &l
var getRMPDetails = function()
{
var inputJson;
for (var i = 0; i < $rootScope.rmps.list.length; i++) {
inputJson = {"input": { "rmp-uuid" : $rootScope.rmps.list[i]['id']}};
rmpInventoryService.getRMPDetails(inputJson, function(data){
console.log(data);
});
}
}
above controller code calls below service method
ris.getRMPDetails= function(input, successCbk){
var uri = CONST.API_BASE + '/rpdDetails';
PromiseHelper.postData(uri, input).then(function(data) {
successCbk(data);
});
};
我已经得到了使用节点异步模块的解决方案
rs.prototype.getRpmDetailsFromController = function(input, successCbk){
var rpmDetailsList = [];
async.each(input, function(rmp, callback){
var rmpList={};
rmpList.rmp = rmp;
var inputJson = {"input": { "rmp-uuid" : rmp['rmp-uuid'] } };
var deployReq = helper.createRequest('POST', inputJson, $config.controllerHostURL, null, function(data){
try {
topology = JSON.parse(data);
if(topology && topology['output']['status'] == 'success'){
rmpDetailsList.push(topology['output']);
callback();
}else{
$logger.warn('ERROR :: from controller');
}
} catch(e) {
$logger.warn('ERROR :: ', e);
}
}, function(){
//error callback
});
deployReq.send();
}, function(err) {
if (err) {
$logger.error('one of the api failed, the whole thing will fail now');
} else {
successCbk(rpmDetailsList);
}
});
};
关于异步的更多信息第一步:确定angular是否实际发送的信号比第一个多。如果不是,那么你的服务器端代码是不相关的,你需要查看你的循环。是的,我正在调用服务10次。我有点困惑。你有一个角度代码,它调用一个
getRMPDetails
方法,这显然是一个节点方法?这毫无意义。一个运行在服务器上,另一个运行在客户端。。。。
rs.prototype.getRpmDetailsFromController = function(input, successCbk){
var rpmDetailsList = [];
async.each(input, function(rmp, callback){
var rmpList={};
rmpList.rmp = rmp;
var inputJson = {"input": { "rmp-uuid" : rmp['rmp-uuid'] } };
var deployReq = helper.createRequest('POST', inputJson, $config.controllerHostURL, null, function(data){
try {
topology = JSON.parse(data);
if(topology && topology['output']['status'] == 'success'){
rmpDetailsList.push(topology['output']);
callback();
}else{
$logger.warn('ERROR :: from controller');
}
} catch(e) {
$logger.warn('ERROR :: ', e);
}
}, function(){
//error callback
});
deployReq.send();
}, function(err) {
if (err) {
$logger.error('one of the api failed, the whole thing will fail now');
} else {
successCbk(rpmDetailsList);
}
});
};