【问题标题】:array showing undefined in variable在变量中显示未定义的数组
【发布时间】:2016-09-15 23:43:53
【问题描述】:

我已经移植了一个对数据数组执行功能的模块。当我运行该函数时,我在我的服务器中获得了结果,但它们似乎没有存储在我的变量中,该变量返回未定义。当我在服务器中看到数组时,有人能告诉我为什么我的数组返回 undefined 吗?

 var net = require('net');
 var foo = require('./employeeModule');
 var _ = require('underscore');
 var colors = require('colors/safe');



var server = net.createServer(
  function(socket){
    console.log("Client connection...");

    socket.on('end', function(){
      console.log("Client disconnected...");
    });

//  process data from client
socket.on('data', function(data){
  var command = data.toString();
  var results={};
  console.log("Received Command: " +command);
    if (command == "lookupByLastName Smith")
      {
         function lastName(results)
         {
          var results = foo.lookupByLastName('Smith');
          console.log('These are the results: '+ results)
         }  
      lastName();
      } 

    else if (command == "addEmployee William Smith")
      {
        function addEmp(results)
        {
          var results = foo.addEmployee('William', 'Smith');
          console.log('These are the results: '+ results)
        }
       addEmp();  
       }

    else if (command == "lookupById 4")
      {
        function lookId(results)
        {
          var results = foo.lookupById(4);
          console.log('These are the results: '+ Name)
         }  
      lookId();
      }

    else if (command == "bye")
      client.end();

    else console.log(colors.green("**"+command+" Command not recognized!**"));     

  });     
});


//listent for client connections
 server.listen(1000, function(){
  console.log("Listening for client connections");
 });

【问题讨论】:

  • 您从这次通话中获得了什么类型的价值。 foo.addEmployee('威廉', '史密斯');
  • 来自调用 foo.lookupByLastName('Smith')。我正在从数组中获取选定的元素。它看起来像这样 [{id: 1, firstName: 'John', lastName: 'Doe'}]。 foo.addEmployee('William', 'Smith') 只是将一个元素添加到从导入模块获取的数据中。

标签: arrays node.js


【解决方案1】:

首先,您的代码有什么问题:

  • var results={}:没有使用 var results
  • 您有 3 个函数 lastNameaddEmplookId。所有都被调用,没有任何东西被传递,因此results var 始终是未定义的。
  • 在每个函数中,您都定义了另一个 var results,因此,results 参数不会做任何事情(比如覆盖它)。
  • lookId var Name 中未定义。
  • 我想您已经硬编码了参数(commands,如William Smith4Smith),因为它是某种类型的“测试”/学习练习。我不建议您在回调函数中定义这 3 个函数(因为它们是在每次调用回调时定义的)。

如果您想保留结果,请执行此操作(按照您的编码类型):

function addEmp(){
  var res = foo.addEmployee('William', 'Smith');
  console.log("There asre the results: " + res);
  return res;
}
results = addEmp(); // now you set the value to results

或多或少地按照你会做什么,我会做类似的事情(小心,我改变了一点编码的类型和边界/输入不受控制):

function lastName(surname){
  return foo.lookupByLastName(surname);
}
function addEmp(name, surname){
  return foo.addEmployee(name, surname);
}
// ...

function socketData(data){
  var args = data.toString().split(' '); // assuming space as splitter
  var results;
  var command = args[0];
  switch(command){
  case 'lookupByLastName':
    results = lastName(args[1]);
    break;
  case 'addEmp':
    results = addEmp(args[1], args[2]);
    break;
  default:
    // ...
  }
  // do something with results
}

var server = net.createServer(function(socket){
  // ...
  socket.on('data', socketData);
  // ...
});

【讨论】:

  • 我使用了第一个解决方案,但我的 res 变量仍然显示未定义。我将变量重新定义为 res = 'This result';。这向我展示了这个结果,但是当我尝试将 res 存储为 res = foo.lookupByLastName('Smith') 时。它仍然返回未定义
  • 如果我定义的 res 变量未定义,那只是因为您从 foo.addEmployee 函数返回未定义(或什么都没有)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 2019-08-17
  • 1970-01-01
相关资源
最近更新 更多