を発現作る:非同期私は2つの機能、第有するnodejsで呼び出し、
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);
});
秒:
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;
});
}
最初の機能は、クライアントアプリケーションによって呼び出され、それは次にgetStances
どのを呼び出しDB呼び出しを行い、内部にすべてのdb情報を含むJSON文字列を返す必要がありますが、text
がundefined
に設定され、残りのルータ機能が実行されると、text
をJSONに解析しようとしますそのundefined
、それは動作しません。ルータの機能を非同期にして、残りのコードを続行する前にtext = getStances()
が完了するのを待つようにするにはどうすればよいですか?私はコールバックと約束を試みましたが、多かれ少なかれ同じ結果を得ています。どういうふうに機能するのか分かりません。誰かが私がこれをどのように修正できるかの例を挙げることはできますか?
'client.query()'のドキュメントをダブルチェックしてください。コールバックの最初の引数をErrorオブジェクトにしないでください。文字列を使ってJSON文字列を構築しないでください。醜いです。単純にオブジェクトを使用します。応答としてオブジェクトを送信すると、オブジェクトはJSONオブジェクトに変換されます。 – Mikey