2016-09-15 4 views
-1

Ich habe ein Modul, das eine Funktion auf einem Array von Daten ausführt, imitiert. Wenn ich die Funktion ausführe, erhalte ich die Ergebnisse in meinem Server, aber sie scheinen nicht in meiner Variablen gespeichert zu sein, die unbestimmt zurückkommt. Kann mir jemand sagen, warum mein Array undefiniert zurückkommt, wenn ich das Array auf meinem Server sehen kann?Array zeigt undefiniert in Variable

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"); 
}); 
+0

Welche Art von Wert erhalten Sie von diesem Anruf. foo.addMitarbeiter ('William', 'Smith'); – abdulbarik

+0

Vom Aufruf foo.lookupByLastName ('Smith'). Ich bekomme ausgewählte Elemente aus einem Array. Es sieht so aus [{id: 1, firstName: 'John', lastName: 'Doe'}]. Der foo.addEmployee ('William', 'Smith') fügt einfach ein Element zu der Datenaufnahme aus dem importierten Modul hinzu. –

Antwort

0

Erstens, was mit Ihrem Code falsch ist:

  • var results={}: die var results nicht verwendet wird.
  • Sie haben 3 Funktionen lastName, addEmp und lookId. Alle werden aufgerufen und nichts wird übergeben, daher ist die Variable results immer undefiniert.
  • Innerhalb jeder dieser Funktionen definieren Sie einen anderen var results, also wird nichts mit dem results Parameter getan (wie es überschrieben wird).
  • in lookId der var Name ist es undefiniert.
  • Ich nehme an, dass Sie die Parameter fest einprogrammiert (command s, wie William Smith, 4 oder Smith) haben, weil es irgendeine Art von „test“/Lernübung ist. Ich würde Ihnen nicht empfehlen, die 3 Funktionen innerhalb der Callback-Funktion zu definieren (weil sie jedes Mal definiert sind, wenn Callback genannt wird).

Wenn Sie die Ergebnisse behalten möchten tun dies (nach Ihrer Art der Codierung):

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 

Nach mehr oder weniger, was würden Sie tun, ich so etwas wie (Vorsicht tun würde, ich ändern ein bisschen die Art der Codierung und Grenzen/Eingänge werden nicht kontrolliert):

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); 
    // ... 
}); 
+0

Ich habe für die erste Lösung verwendet, aber meine Res-Variable zeigt immer noch undefined. Ich habe die Variable neu definiert, etwa so wie res = 'This result' ;. Das zeigt mir dieses Ergebnis aber das wenn ich versuche Res als res = foo.lookupByLastName ('Smith') zu speichern. Es ist immer noch undefined –

+0

Wenn die Res-Variable, die ich definiert habe, nicht definiert ist, ist es nur, weil Sie undefined (oder einfach nichts) aus Ihrer Funktion "foo.addEmployee" zurückgeben. – user3819881

Verwandte Themen