Im mit Expressjs und MySQL-Paket. Ich habe eine Benutzertabelle, jeder Benutzer könnte viele Fähigkeiten, Projekte, Zertifizierungen in verschiedenen Tabellen gespeichert haben. Wie kann ich alle diese Daten in einem einzigen Benutzerobjekt erhalten?mehrere verschachtelte Callback-Funktionen vor dem Rückruf der Eltern in Javascript
getUserDataById(req.params.id, function (user) {
if (user) {
res.send(user);
}
}
var getUserDataById = function (id, callback) {
connection.query(userSql, id, function (err, rows) {
if (rows[0]) {
user = new User(rows[0]); //parse row data to user obj
// The main problem
//get skills and projects.... and asign to user obj
parseArrayData(skillSql, user.id, Skill, function (skills) {
user.skills = skills;
}
);
parseArrayData(projectSql, user.id, Project, function (project) {
user.projects = projects;
}
);
// is here
callback(user);
}
});
}
var parseArrayData = function (query, id, Obj, callback) {
connection.pool.query(query, id, function (err, rows) {
if (err) {
throw err;
} else {
console.log('rows',rows);
var array = [];
for (var i = 0; i < rows.length; i++) {
array[i] = new Obj(rows[i]); // map obj's attributes with fields
};
callback(rows);
}
});
};
Dank @narainsagar. Dies könnte mir helfen, mein Problem zu lösen. Ich habe festgestellt, dass "Versprechen" in dieser Situation helfen könnte. Ich werde versuchen, es so zu lösen –
cool. Ja, Versprechen ist besser. – narainsagar
Ich habe Rückrufe verwendet, weil Sie es6 nicht erwähnt oder Versprechen in Code verwendet haben. Ihr Code enthielt Callbacks, also habe ich auch Callbacks verwendet – narainsagar