我的nodejs程序具有2个功能:
我意识到,当我在foo2()之前运行foo1()时,保存到数据库部分将正常工作。但是,如果将foo1()放在foo2()之后,则数据将永远不会保存到数据库中。这是一些代码。
我了解它是异步的,因此我将foo1()放在“ end”中。如果我以这种方式运行它,foo1()似乎已执行,但是它没有保存到mysql中。但是,如果我将foo1()放在A点之前,它将被保存。如果我将foo1()放在B点之后,它将不会将数据保存到数据库中,但是当我在vs代码中使用分步模式时,我可以看到它正在foo1()中运行。
这是我的foo2()。
//this is my foo2.
//point A
fs.createReadStream(file_location)
.pipe(parse({ delimiter: ':' }))
.on('data', function (csvrow) {
input_data.push(parseFloat(csvrow[0]));
})
.on('end', function () { //ensure my_update() is executed after done reading the file, so my_update() can use data from the file.
my_update(); //foo1() is in my_update()
});
//point B
这是foo1()
var mysql = require('mysql');
var save_to_db = function (best_nn, fitness, type) {
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'nodejstestdb'
});
connection.connect();
var string_nn = JSON.stringify(best_nn.toJSON());
var addSql = 'INSERT INTO mytable1(nn, type, fitness) VALUES(?,?,?)';
var addSqlParams = [string_nn, type, fitness];
connection.query(addSql, addSqlParams, function (err, result) {
if (err) {
console.log('[INSERT ERROR] - ', err.message);
return;
}
console.log('--------------------------INSERT----------------------------');
//console.log('INSERT ID:',result.insertId);
console.log('INSERT ID:', result);
console.log('-----------------------------------------------------------------\n\n');
});
connection.end();
}
即
if save_to_db() is here, it is OK.
//this is my foo2.
//point A
fs.createReadStream(file_location)
.pipe(parse({ delimiter: ':' }))
.on('data', function (csvrow) {
input_data.push(parseFloat(csvrow[0]));
})
.on('end', function () { //ensure my_update() is executed after done reading the file, so my_update() can use data from the file.
my_update(); //foo1() is in my_update()
});
//point B
but if save_to_db() is here, it will save to db.