Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在循环中调用NodeJs服务器上的服务_Javascript_Angularjs_Node.js_Node Modules - Fatal编程技术网

Javascript 无法在循环中调用NodeJs服务器上的服务

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

我的应用程序由前端(AngularJS)和后端(nodejs)组成。我在一个列表中有10个id,我想迭代这些列表,每次迭代都需要将id传递给服务器(node js)并将数据返回前端。我可以从控制台日志中看到,angular代码正在进行所有10个调用,但node js服务器代码只处理第一个请求。有什么解决办法吗。我是节点Js的乞丐

前端角js代码:

 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);
                    }
        });
};