[英]How does async work in Express?
我在ExpressJS 指南中發現了以下內容:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'dbuser',
password : 's3kreee7'
});
connection.connect();
connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
if (err) throw err;
console.log('The solution is: ', rows[0].solution);
});
connection.end();
這不應該是不好的做法嗎? 在我看來,連接有可能在執行查詢之前結束。 那不會報錯嗎?
如前所述這里:
您在連接上調用的每個方法都會排隊並按順序執行。
關閉連接是使用 end() 完成的,它確保在向 mysql 服務器發送退出數據包之前執行所有剩余的查詢。
因此,即使可以在查詢完成之前調用end()
方法,它也不會在查詢完成執行之前實際執行。
這與mysql
包比 NodeJS 本身有更多關系。
您的問題async 在 Express 中是如何工作的? 這不應該是不好的做法嗎? 可以通過多種方式回答,但為了清楚起見,我想解釋一下這取決於!!!!
假設您不知道實際實現,這通常是非常糟糕的做法。
如果實現真的很簡單,它完全按照您的要求執行 - 即在執行end
時關閉或結束連接,那么它可能會導致相當丑陋的競爭條件,根據機器的負載它可能會或可能不會工作.
然而,一個進行引用計數的聰明實現——即end
實際上並沒有關閉連接,而只是設置一個標志來說明——“當最后一個回調完成后關閉”——那么它可能會起作用。
如果它使用引用計數來實現 mysql 連接器,那么這可能會很好地工作 - 但這並不等於說它是作為插件找到的所有東西的好習慣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.