2017-01-05 104 views
0

我有一個關於在NodeJS和MySQL中對數據庫的異步查詢的問題。比方說,我有以下代碼NodeJS mysql異步查詢

var mysql = require("mysql"); 
var con = mysql.createConnection({ 
    .... 
}); 

con.connect();  

con.query("select MILLIONS records from table1",function(err,rows){ 
    console.log('Data received 1'); 
}); 

con.query("select HUNDRED records from table2",function(err,rows){ 
    console.log('Data received 2'); 
}); 

第一查詢花費更多的執行時間,二是要快得多,我期待這第二個回調將首先執行,但它不是:)。我試圖創建第二個連接,它按預期工作 - 調用異步工作。看起來連接並不是在兩個單獨的異步查詢之間共享的,它們會隨之運行。或者我做錯了什麼?也許有人可以提供一些關於如何在不爲每個呼叫建立連接的情況下進行異步呼叫的信息。

+0

你可以使用'async'包。 [閱讀](https://github.com/caolan/async/blob/v1.5.2/README.md) –

+0

你可以使用'Sequelize'來管理MySQL數據庫 – IARKI

+0

請不要編輯問題的答案,或者實際上自己添加答案,或者接受djones提供的答案,如果答案足夠好的話。 – Gimby

回答

0

連接表示將命令發送到服務器並在您的應用程序和服務器之間接收數據的流。當該流正忙於發送數百萬條記錄時,它不能處理另一個查詢。

如果要並行執行多個查詢,則需要多個連接。你應該考慮使用這個connection pool

var pool = mysql.createPool({ ... }); 

pool.query("select MILLIONS records from table1",function(err,rows){ 
    console.log('Data received 1'); 
}); 

pool.query("select HUNDRED records from table2",function(err,rows){ 
    console.log('Data received 2'); 
});