2016-09-13 83 views
-2

我的应用程序由前端(angular js)和后端(nodejs)组成。我在列表中有10个ID,我想迭代这些列表,每次迭代都需要将ID传递给服务器(节点js)并将数据返回到前端。我可以从控制台日志中看到角码正在进行所有10个调用,但节点js服务器代码仅处理第一个请求。有没有解决方案。我是Node Js的成员。无法在循环中调用NodeJs服务器上的服务

前端角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); 
       }); 
      }; 

节点JS服务器代码:

Ctrl.prototype.getRMPDetails = function ($done, $input, rmpService, $logger) { 

    var topology = {}; 
    var input = $input.body; 
    console.log('method called'); =>> this is called only first RMP ID 
    rmpService.getRmpDetailsFromController(input, function(data){ 
     $done({"rmps" : data}); 
    });  
}; 

rmpService.getRmpDetailsFromController => it is a custom service in Nodejs server 
+0

步骤之一:找出如果角度实际上是发送出比所述第一多。如果不是,那么你的服务器端代码是不相关的,你需要看看你的循环。 –

+0

是角是调用服务10次。 – Kiran

+0

我有点困惑。你有角码,这是调用'getRMPDetails'方法,显然是一个节点方法?这是没有意义的。一个在服务器上运行,另一个在客户端上运行.... –

回答

0

我已得到使用节点异步模块的解决方案。

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

https://github.com/yongzhihuang/PentaCode/blob/master/AsyncJs/asyncEach.js

更多关于异步https://github.com/caolan/async