【问题标题】:Unable to call services on NodeJs server in a loop无法循环调用 NodeJs 服务器上的服务
【发布时间】:2017-01-21 14:37:09
【问题描述】:

我的应用程序由前端(angular js)和后端(nodejs)组成。我在一个列表中有 10 个 id,我想迭代这些列表,每次迭代需要将 id 传递给服务器(节点 js)并将数据返回到前端。我可以从控制台日志中看到角度代码正在发出所有 10 次调用,但节点 js 服务器代码只处理第一个请求。有什么解决方案。我是 Node Js 的初学者。

前端 Angular 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

【问题讨论】:

  • 第一步:确定 angular 是否实际发送的比第一个多。如果不是,那么您的服务器端代码是无关紧要的,您需要查看您的循环。
  • 是的,Angular 调用了该服务 10 次。
  • 我有点困惑。你有角度代码,那是调用getRMPDetails 方法,这显然是一个节点方法?这是没有意义的。一个在服务器上运行,另一个在客户端上运行....

标签: javascript angularjs node.js node-modules


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-03-02
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多