我正在調用函數,以便使用mysql
模塊node.js
將一些值插入到數據庫表中。該函數在for
循環內部調用,我可以在函數內部獲取每個INSERT
查詢的最後一個insertId
。使用node.js + mysql的最後一個insertId的全局範圍
我的目的
我想這些id's
存儲到數組中,以在我的代碼中使用它們,但我不能做到這一點。
- 函數調用
for(var i=0;i<some_number;i++){
if (<something is true>){
var lastid = [];
//Function calling
function_a(x, y, z, w, function(error, result) {
if(!error){
lastid.push(result.insertId);
}
//To Do
else{}
});
}
}
- 功能
function function_a(a, b, c, d, callback){
//Connection to the DB
const con = mysql.createConnection({
host: 'host',
user: 'user',
password: 'password',
database: 'database'
});
//DB query
var query = "INSERT INTO my_table (column1, column1, column1, column1) VALUES ('"+a+"', '"+b+"', '"+c+"', '"+d+"')";
con.query(query, (err, rows) => {
var e = rows.insertId;
return callback(err, e);
});
con.end();
}
的問題是,我不能使用id的功能之外。
任何想法我該怎麼做?這是關於變量範圍?
謝謝爲你的答案。我終於相信這是關於使用回調函數時的變量範圍。每一次嘗試我使用ID的'數組'總是空的。你有任何電子郵件xample可以幫助我嗎? – GeoDim
它是空的,因爲你在for循環之後調用它,但是,不能保證for循環完成迭代。這是由於其中的異步操作(例如數據庫查詢)而發生的。爲了做到這一點,你可以看看[這個循環回調模式](http://www.richardrodger.com/2011/04/21/node-js-how-to-write-a-for-loop- with-callbacks /#。WcixIFuCyUk)或[此示例](promise)(https://stackoverflow.com/questions/28736452/bluebird-promise-serial-iteration-and-resolve-to-modified-array)promise.each )功能使用。 – cassini