2012-10-19 87 views
2

目前我正在使用node-mysql(https://github.com/felixge/node-mysql),對於從數據庫返回的每個結果,我必須執行幾個函數。目前,它試圖一次完成所有的事情,但是無論如何要讓它等到每個函數完成之後才移動到mysql的下一個結果?等到foreach完成

connection.query('select * from data', function(err, rows) { 
for (var i = 0; i < rows.length; i++) { 
    doThis(rows[i].axn, rows[i].dnq, rows[i].bgq); 
} 
}); 

在doThis功能,如果某些要求比它滿足將數據傳遞到另一功能。在移動到下一個查詢行之前,我怎樣才能確保它們完成第一個

預先感謝您!

+0

如果'doThis'什麼是異步的,我不認爲你可以。你必須使用回調和遞歸的概念來做你想做的事情。 – Ian

回答

4

如果您的doThis函數支持在調用完成後調用的回調參數,那麼您可以使用async庫的forEachSerial方法相當乾淨地完成此操作。

事情是這樣的:

connection.query('select * from data', function(err, rows) { 
    async.forEachSeries(rows, function(row, callback) { 
     doThis(row.axn, row.dnq, row.bgq, callback); 
    }, function(err) { 
     // All done 
    }); 
}); 
+0

非常感謝! :-) – george

0

result事件上的每一行數據解僱,見documentation

connection.query('select * from data') 
    .on('result', function(row) { 
    doThis(row.axn, row.dnq, row.bgq); 
    }); 
+0

謝謝你的迴應,我甚至沒有看到這個!我會試試這個,再次感謝。 – george