Ich bin eine API implementieren, um eine MySQL-Datenbank von Nodejs zu verwalten, und ich möchte meinen Code sauber zu halten, da die Arbeit, die ich vorhabe, eine Menge verschachtelte connection.query Funktionen überall haben kann der Ort, also habe ich beschlossen, so viele Fragen wie möglich in separate Funktionen zu trennen.Javascript versprechen mit MySQL
starten ich eine Funktion zu prüfen, ob ein vorhandenes Element bereits auf dem Tisch, wie dies tun wollte:
var insert = function (item, done) {
validator(item).then(function(err,done) {
console.log('here I go: '+done);
if(done) {
console.log('good');
} else{
console.log('bad')
}
);
}
: wie diese
function validator(item) {
return new Promise(function(err,done) {
connection.query('select * from items where item_id = ?', [item.id] , function(err,rows){
console.log(rows);
console.log("above row object");
if (err) {
return done(false);
}
if (rows.length) {
console.log('That item is already in the DB.');
return done(false);
} else {
console.log('That item is new.');
return done(true);
}
});
});
}
Und dann will ich es benutzen
Aber es funktioniert nicht wie ich erwartet habe, die erste Funktion erkennt genau, ob ein Element existiert oder nicht, aber die zweite Funktion erreicht niemals den "here I go" -Druck.
Ich habe Use promise to process MySQL return value in node.js geprüft, Javascript Promise node.js? und Javascript & promises with Q - closure problems in promises aber die conclussion I erreichen, dass dies ein klassisches PEBCAK Problem ist, wie, dass ich ein sehr inkompetent JavaScript-Programmierer bin und wickeln kann meinen Kopf nicht um die Rückrufe und verspricht alle so gut, dass ich sie in die falsche Richtung führe.
'return new Promise (Funktion (err, done) {'? So funktioniert das nicht. –