2016-05-05 8 views
0

Also versuche ich herauszufinden, warum mein zurückgegebenes Objekt jedes Mal nur []? Hier ist mein Code:Knoten/JSON Probleme

var returnObject = []; 

db.query(queryString, function(err, rows, fields) { 
if (err) throw err; 

for (var i in rows) 
{ 
    console.log('Data: ', rows[i]); 

    var marker = 
    { 
    o_ID:rows[i].o_ID, 
    data:rows[i].data 
    }; 

    returnObject[i]=marker; 

    console.log(chalk.red(returnObject[i].o_ID)); 
    console.log(chalk.red(returnObject[i].data)); 

} 
}); 

var sqsParams = {MessageBody: JSON.stringify(returnObject), QueueUrl :'---'}; 

Aus irgendwelchen Gründen, wenn ich die returnObject Werte drucken sie korrekt sind, aber wenn es um die etwas passiert JSON.stringify bekommt und sendet an meine SQS-Warteschlange nur []. Aber das noch führt in der gleichen Ausgabe

dachte ich, vielleicht den Marker Variable loszuwerden und

returnObject[i]= { 
    o_ID:rows[i].o_ID, 
    data:rows[i].data 
    }; 

nur zuweisen. Irgendwelche Ideen? Vielen Dank!

Antwort

0

Datenbankabfragen in JavaScript sind normalerweise asynchron. Das bedeutet, dass der Code innerhalb Ihrer Callback-Funktion function(err, rows, fields) nur ausgeführt wird, nachdem die Datenbankabfrage durchgeführt wurde, während Sie die Zuweisung zu direkt nach dem Starten der Datenbankabfrage ausführen. Das Ergebnis ist, dass Code innerhalb Ihrer Callback-Funktion nicht ausgeführt wurde, bevor Sie returnObject mit JSON.stringify und es ist immer noch in seinem ursprünglichen Wert [].

+0

ahhhh duhh. Ich habe mich gefragt warum. Wir haben das alles in db call gemacht und wir arbeiten perfekt! Vielen Dank! – wdlax11

0

Ihre sqsParams-Variable wird außerhalb des db.query-Callbacks festgelegt. Da db.query asynchron ist, wird Ihr Code mit einem leeren Array durchfallen.

Ihre sqsParams Variable in die Callback-Bewegen Sie db.query liefern, zB:

 console.log(chalk.red(returnObject[i].o_ID)); 
     console.log(chalk.red(returnObject[i].data)); 
    } 
    var sqsParams = {MessageBody: JSON.stringify(returnObject), QueueUrl :'---'}; 
    // Use sqsParams here 
});