Node.Js mysql 仅第一次执行
Node.Js mysql only excecuted for the first time
我编写的 node.js 应用程序有问题,SQL 语句仅在第一次执行时有效,语句之后的函数永远不会被触发。
当我启动应用程序时没有错误,即使没有执行查询它也会运行。
此函数仅在第一次执行时有效:
var sqlEntfernen = async function(id) {
return new Promise(function(resolve) {
var statement3 = 'DELETE FROM `table` WHERE `table`.`column` = ' + id;
console.log('1'); //this gets fired every time the function is executed
connection.query(statement3, async function(error3, results3, fields3) {
console.log(results3.affectedRows + ""); //this never gets fired
if (error3) {
resolve(0);
} else {
if (results3.affectedRows > 0) {
resolve(1);
} else {
resolve(0);
}
}
});
})
}
这是在 for 循环中执行的代码:
sqlEntfernen(userid).then(function(statusCode) {
if (statusCode == 0) {
console.log("\x1b[41m%s\x1b[0m", 'Fehler beim Löschen aus der Datenbank!'); //never gets fired
} else if (statusCode == 1) {
console.log("\x1b[45m%s\x1b[0m", 'Der Benutzer mit der Benutzer_ID ' + id + ' wurde aus der Inventur entfernt!'); //never gets fired
}
});
我不知道为什么这个查询只在第一次有效。
希望得到您的帮助。
提前致谢,
帕特里克
编辑:
var mysql = require('mysql');
var connection = mysql.createConnection({
user: 'username',
password: 'password',
host: '127.0.0.1',
database: 'database'
});
Object.size = function(obj) {
var size = 0,
key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
var sqlEntfernen = async function(id) {
return new Promise(async function(resolve) {
var statement3 = 'DELETE FROM `benutzer` WHERE `benutzer`.`Benutzer_ID` = ' + id;
console.log(statement3); //this gets fired every time the function is excecuted
connection.query(statement3, async function(error3, results3, fields3) {
console.log(results3.affectedRows + "");
if (error3) {
resolve(0);
} else {
if (results3.affectedRows > 0) {
resolve(1);
} else {
resolve(0);
}
}
});
})
}
var benutzerLoeschen = async function(mandant) {
return new Promise(async function(resolve) {
var benutzerArray;
var benutzerArrayinventur;
var statement = 'SELECT `benutzer`.`Benutzer_ID` FROM `benutzer`';
connection.query(statement, async function(error, results, fields) {
if (error) {
console.log("\x1b[41m%s\x1b[0m", 'Fehler beim auslesen der Datenbank "benutzer"!');
} else {
benutzerArray = results;
console.log("\x1b[42m%s\x1b[0m", 'Die Datenbank "benutzer" wurde erfolgreich ausgelesen!');
}
});
setTimeout(function() {
var statement2 = 'SELECT `objekte`.`Benutzer_ID` FROM `objekte`';
connection.query(statement2, async function(error2, results2, fields2) {
if (error2) {
console.log("\x1b[41m%s\x1b[0m", 'Fehler beim auslesen der Datenbank "objekte"!');
} else {
benutzerArrayInventur = results2;
console.log("\x1b[42m%s\x1b[0m", 'Die Datenbank "objekte" wurde erfolgreich ausgelesen!');
}
});
console.log("\x1b[44m%s\x1b[0m", "Startvorgang...");
}, 100);
var status = false;
setTimeout(function() {
for (let i = 0; i < Object.size(benutzerArray); i++) {
for (let i2 = 0; i2 < Object.size(benutzerArrayInventur); i2++) {
if (benutzerArray[i].Benutzer_ID == benutzerArrayInventur[i2].Benutzer_ID) {
status = true;
i2 = Object.size(benutzerArrayInventur) - 1;
}
if (i2 == (Object.size(benutzerArrayInventur) - 1)) {
if (status) {
console.log("\x1b[42m%s\x1b[0m", 'Der Benutzer mit der Benutzer_ID ' + benutzerArray[i].Benutzer_ID + ' wird noch in der Inventur verwendet!');
status = false;
} else {
console.log("\x1b[43m%s\x1b[0m", 'Der Benutzer mit der Benutzer_ID ' + benutzerArray[i].Benutzer_ID + ' wird nichtmehr in der Inventur verwendet!');
sqlEntfernen(benutzerArray[i].Benutzer_ID).then(function(statusCode) {
if (statusCode == 0) {
console.log("\x1b[41m%s\x1b[0m", 'Fehler beim löschen aus der Datenbank!');
} else if (statusCode == 1) {
console.log("\x1b[45m%s\x1b[0m", 'Der Benutzer mit der Benutzer_ID ' + id + ' wurde aus der Inventur entfernt!');
}
});
}
if (i == (Object.size(benutzerArray) - 1)) {
setTimeout(function() {
resolve('Bereinigung abgeschlossen!');
}, 100);
}
}
}
}
}, 10000);
});
}
benutzerLoeschen().then(function(message) {
console.log("\x1b[44m%s\x1b[0m", message);
setTimeout(function() {
process.exit();
}, 10000);
});
编辑2:
NodeJs log
我认为 mysql 需要一个常规函数作为回调并使用 异步函数... 你在技术上提供了一个 Promise。我会尝试从回调中删除异步:
connection.query(statement3, function(error3, results3, fields3) {
我不确定为什么,但我发现 sql 语句是在我的代码完成后执行的。 statusCode 也在代码的末尾返回。
所以它的工作即使我不明白为什么最后执行语句。
我编写的 node.js 应用程序有问题,SQL 语句仅在第一次执行时有效,语句之后的函数永远不会被触发。
当我启动应用程序时没有错误,即使没有执行查询它也会运行。
此函数仅在第一次执行时有效:
var sqlEntfernen = async function(id) {
return new Promise(function(resolve) {
var statement3 = 'DELETE FROM `table` WHERE `table`.`column` = ' + id;
console.log('1'); //this gets fired every time the function is executed
connection.query(statement3, async function(error3, results3, fields3) {
console.log(results3.affectedRows + ""); //this never gets fired
if (error3) {
resolve(0);
} else {
if (results3.affectedRows > 0) {
resolve(1);
} else {
resolve(0);
}
}
});
})
}
这是在 for 循环中执行的代码:
sqlEntfernen(userid).then(function(statusCode) {
if (statusCode == 0) {
console.log("\x1b[41m%s\x1b[0m", 'Fehler beim Löschen aus der Datenbank!'); //never gets fired
} else if (statusCode == 1) {
console.log("\x1b[45m%s\x1b[0m", 'Der Benutzer mit der Benutzer_ID ' + id + ' wurde aus der Inventur entfernt!'); //never gets fired
}
});
我不知道为什么这个查询只在第一次有效。
希望得到您的帮助。
提前致谢, 帕特里克
编辑:
var mysql = require('mysql');
var connection = mysql.createConnection({
user: 'username',
password: 'password',
host: '127.0.0.1',
database: 'database'
});
Object.size = function(obj) {
var size = 0,
key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
var sqlEntfernen = async function(id) {
return new Promise(async function(resolve) {
var statement3 = 'DELETE FROM `benutzer` WHERE `benutzer`.`Benutzer_ID` = ' + id;
console.log(statement3); //this gets fired every time the function is excecuted
connection.query(statement3, async function(error3, results3, fields3) {
console.log(results3.affectedRows + "");
if (error3) {
resolve(0);
} else {
if (results3.affectedRows > 0) {
resolve(1);
} else {
resolve(0);
}
}
});
})
}
var benutzerLoeschen = async function(mandant) {
return new Promise(async function(resolve) {
var benutzerArray;
var benutzerArrayinventur;
var statement = 'SELECT `benutzer`.`Benutzer_ID` FROM `benutzer`';
connection.query(statement, async function(error, results, fields) {
if (error) {
console.log("\x1b[41m%s\x1b[0m", 'Fehler beim auslesen der Datenbank "benutzer"!');
} else {
benutzerArray = results;
console.log("\x1b[42m%s\x1b[0m", 'Die Datenbank "benutzer" wurde erfolgreich ausgelesen!');
}
});
setTimeout(function() {
var statement2 = 'SELECT `objekte`.`Benutzer_ID` FROM `objekte`';
connection.query(statement2, async function(error2, results2, fields2) {
if (error2) {
console.log("\x1b[41m%s\x1b[0m", 'Fehler beim auslesen der Datenbank "objekte"!');
} else {
benutzerArrayInventur = results2;
console.log("\x1b[42m%s\x1b[0m", 'Die Datenbank "objekte" wurde erfolgreich ausgelesen!');
}
});
console.log("\x1b[44m%s\x1b[0m", "Startvorgang...");
}, 100);
var status = false;
setTimeout(function() {
for (let i = 0; i < Object.size(benutzerArray); i++) {
for (let i2 = 0; i2 < Object.size(benutzerArrayInventur); i2++) {
if (benutzerArray[i].Benutzer_ID == benutzerArrayInventur[i2].Benutzer_ID) {
status = true;
i2 = Object.size(benutzerArrayInventur) - 1;
}
if (i2 == (Object.size(benutzerArrayInventur) - 1)) {
if (status) {
console.log("\x1b[42m%s\x1b[0m", 'Der Benutzer mit der Benutzer_ID ' + benutzerArray[i].Benutzer_ID + ' wird noch in der Inventur verwendet!');
status = false;
} else {
console.log("\x1b[43m%s\x1b[0m", 'Der Benutzer mit der Benutzer_ID ' + benutzerArray[i].Benutzer_ID + ' wird nichtmehr in der Inventur verwendet!');
sqlEntfernen(benutzerArray[i].Benutzer_ID).then(function(statusCode) {
if (statusCode == 0) {
console.log("\x1b[41m%s\x1b[0m", 'Fehler beim löschen aus der Datenbank!');
} else if (statusCode == 1) {
console.log("\x1b[45m%s\x1b[0m", 'Der Benutzer mit der Benutzer_ID ' + id + ' wurde aus der Inventur entfernt!');
}
});
}
if (i == (Object.size(benutzerArray) - 1)) {
setTimeout(function() {
resolve('Bereinigung abgeschlossen!');
}, 100);
}
}
}
}
}, 10000);
});
}
benutzerLoeschen().then(function(message) {
console.log("\x1b[44m%s\x1b[0m", message);
setTimeout(function() {
process.exit();
}, 10000);
});
编辑2: NodeJs log
我认为 mysql 需要一个常规函数作为回调并使用 异步函数... 你在技术上提供了一个 Promise。我会尝试从回调中删除异步:
connection.query(statement3, function(error3, results3, fields3) {
我不确定为什么,但我发现 sql 语句是在我的代码完成后执行的。 statusCode 也在代码的末尾返回。 所以它的工作即使我不明白为什么最后执行语句。