私は現在、プライベートメッセージシステムのバックエンドAPIを作成しています。非同期呼び出しの応答を非同期呼び出しの外部で使用するために変数に保存する必要があります。mysqlクエリの応答を変数に保存して後で使用できるようにする
私はさらに説明する前にコードを提示します:
app.get("/api/users/:UserID/messages/deletemessage/:MessageID", function(req, res){
var messageID = parseInt(req.params.MessageID);
var message = null;
connection.query("SELECT * FROM Message WHERE MessageID = ?", messageID, function(err, resp){
if(!err){
message = resp[0];
}
});
console.log(message);
//continue using the message variable here to perform more functionality...
});
あなたは、私はmysqlデータベースの選択クエリの応答にmessage
変数を割り当てるしようとして見ることができます。
この機能を実行すると、null
が画面に印刷されます。私はなぜこれが起きるのか知っています。なぜなら、データベースへのクエリが完了する前にconsole.log
ステートメントが呼び出されたからです。
私の質問は、データベースクエリの範囲外でメッセージ変数を使用するにはどうすればこの問題を解決できますか?
私は働いてなかった、これを試してみた:
app.get("/api/users/:UserID/messages/deletemessage/:MessageID", function(req, res){
var messageID = parseInt(req.params.MessageID);
var message = null;
connection.query("SELECT * FROM Message WHERE MessageID = ?", messageID, function(err, resp){
if(!err){
connection.end(); //try to end the connection so hopefully it assigns
message = resp[0];
}
});
console.log(message);
//continue using the message variable here to perform more functionality...
});
他に何かをする前に結果を待つようにコードを修正しないでください。 – adeneo
@adeneoには、「それをコーディングする」という一般的な方法がありますか?すぐに結果を使用する必要がある場合はどうすればよいですか?待っている方法はありますか? – JavascriptLoser
確かに、コールバックを使用するか、結果を待つという約束を実装します。どのように問題を解決するかは、返されたデータをどのように使用しているか、すぐに*する必要がある理由によって異なります。 – adeneo