2016-05-05 113 views
0

所以我想弄清楚爲什麼我每次返回的對象只是[]? 這裏是我的代碼:節點/ JSON問題

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 :'---'}; 

對於某些原因,當我打印返回object值他們是正確的,但,當它到達的JSON.stringify有事發送到我的SQS隊列只是[]。

我想也許擺脫標記變量的和公正的分配

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

但仍然導致了同樣的問題。有任何想法嗎?謝謝!

回答

0

JavaScript中的數據庫查詢通常是異步的。這意味着您的回調函數function(err, rows, fields)中的代碼將僅在數據庫查詢完成後運行,而您將分配給sqsParams將在數據庫查詢已啓動開始之後立即完成。結果是您的回調函數中的代碼尚未在returnObjectJSON.stringify之間運行,並且它仍處於其原始值[]

+0

哈啊duhh。我想知道爲什麼。只是彈出所有的數據庫調用,我們正在完美的工作!謝謝! – wdlax11

0

您的sqsParams變量正在db.query回調之外設置。由於db.query是異步的,所以你的代碼只能通過一個空數組來完成。

將您sqsParams變量爲你提供給db.query回調,如:

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