海綿寶寶撒
2019-03-05 15:19:36
npm mysql 文檔中我們可以看到對connection.end()和connection.destroy()區(qū)別的描述是connection.end()會確保在把COM_QUIT包發(fā)送給mysql服務(wù)器之前執(zhí)行隊列中的查詢語句,如果在COM_QUIT包發(fā)送之前發(fā)生了致命錯誤會把錯誤傳遞給回調(diào)函數(shù)的參數(shù)err,但連接無論如何也都是會被中斷的。而destroy()是沒有回調(diào)函數(shù)直接中斷的。(不知道有沒有翻譯對,看了網(wǎng)上一些文章也是大概這么說的)。我的問題是,COM_QUIT發(fā)送前隊列中的查詢語句指的是什么,這個隊列是哪來的,有什么實際的情景可以說明一下嗎?這兩種終止連接的方式對于用戶有什么不同的影響?如果只是有沒有回調(diào)函數(shù)的區(qū)別,那我要終止連接是兩個都可以任意使用嗎?
1 回答

人到中年有點甜
TA貢獻1895條經(jīng)驗 獲得超7個贊
查詢隊列指的是什么
在官方文檔的Introduction部分其實就講到了,文檔傳送門:
Every method you invoke on a connection is queued and executed in sequence.
Closing the connection is done using end() which makes sure all remaining queries are executed before sending a quit packet to the mysql server.
舉例,下面的兩個調(diào)用,在內(nèi)部是排隊執(zhí)行的。
connection.query('SELECT * FROM hello'); connection.query('SELECT * FROM world');
end、destroy的區(qū)別
兩者的區(qū)別很明顯,還是以前面的代碼為例子。
1、connection.end():把查詢1、查詢2順利執(zhí)行完,得到查詢結(jié)果后,斷開mysql服務(wù)器的連接。
2、connection.destryo():直接斷開連接,不管還有多少查詢沒執(zhí)行完。
connection.query('SELECT * FROM hello'); // 查詢1 connection.query('SELECT * FROM world'); // 查詢2
添加回答
舉報
0/150
提交
取消