Ich habe 2 Funktionen, die erste:machen Asynchron-Anrufe mit NodeJS und Express
router.post('/getStances', function(req, res, next) {
var text = '{"success":"0"}';
text = queries.getStances(req.body.issues[0], req.body.issues[1], req.body.issues[2], req.body.issues[3]);
var obj = JSON.parse(result);
res.send(obj);
});
die zweite:
getStances: function (a, b, c, d) {
var sendback = '{"stances":[';
sendback += '{"1":[';
var querytext = "SELECT * FROM allIssues WHERE topicname = '"+ a +"'";
query = client.query(querytext,function (callback) {
query.on('row', (row) => {
sendback += "{" + '"'+row['topicstance']+'"' + " : " + '"'+ row['topicdescription'] + '"'+ "} , ";
console.log(sendback);
});
});
querytext = "SELECT * FROM allIssues WHERE topicname = '"+ b +"'";
query = client.query(querytext);
query.on('row', (row) => {
sendback += "{" + '"'+ row['topicstance'] + '"'+ " : " + '"'+ row['topicdescription'] + '"'+ "} , ";
});
query.on('end',() => {
sendback += "]}";
sendback += "]}";
client.end();
return sendback;
});
}
Die erste Funktion durch die Client-Anwendung aufgerufen wird, dann ruft getStances
die macht DB-Aufrufe und sollte einen JSON-String zurückgeben, der alle db-Informationen enthält, aber wenn text = getStances()
aufgerufen wird, text
auf undefined
gesetzt ist und der Rest der Router-Funktion ausgeführt wird, versucht er text
zu JSON zu analysieren, aber seit seine undefined
, es funktioniert nicht. Wie mache ich den Router asynchron, so dass er auf text = getStances()
wartet, bevor er mit dem Rest des Codes fortfährt? Ich habe versucht Callbacks und Versprechungen, aber ich bekomme mehr oder weniger die gleichen Ergebnisse, ich bin mir nicht sicher, wie genau sie funktionieren, vielleicht habe ich sie falsch benutzt. Kann jemand Beispiele geben, wie ich das beheben könnte?
Überprüfen Sie die Dokumentation für 'client.query()', sollte das erste Argument des Callbacks nicht ein Error-Objekt sein? Und baue deine JSON-Zeichenkette nicht mit Zeichenketten - es ist hässlich; Benutze einfach ein Objekt. Wenn Sie ein Objekt als Antwort senden, wird es in ein JSON-Objekt konvertiert. – Mikey