我目前正在開發一個使用node.js和MySQL的API。我是新來的這個非阻塞的東西,我有一個問題。我正在使用節點和MySQL模塊。nodejs和無阻塞的噩夢
說,我們有這樣的函數:
function doQuery(sql, callback) {
connect(); //does the Client.connect()
client.query(sql, function(err, results, fields) {
if (err) {
errorLog.trace(err, __filename);
throw err;
} else {
logger.trace('DATABASE ACCESS: {query: ' + sql + '} result: OK', __filename);
}
client.end();
callback(results);
});
}
一切運行正常,回調處理值的迴歸,但有一些困擾我。我的瀏覽器什麼,直到響應回來,我不知道這是否是因爲在這段時間節點實際上被阻止,或不。
那麼,我怎麼知道一個操作是否真的阻塞了我的節點進程?我認爲當你將一個回調函數傳遞給一個函數時,節點會自動處理它,並將這個回調函數的執行放在事件循環的隊列中。但我實際上並不確定
這一切對你有意義嗎?
我不是100%對我們的問題。你在問這個函數是否阻塞,回調是如何工作的,或者如何找到除函數之外的其他東西是阻塞的? – Robert 2011-05-09 21:05:43
其實它更多的是關於如何知道什麼時候阻止了你的節點進程(在這種情況下是Http.server)。 – kaspar 2011-05-09 21:13:48