В настоящее время я пишу backend 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...
});
Вы можете видеть, что я пытаюсь присвоить переменную message
в ответ на запрос выбора базы данных MySQL.
Когда функция запускается, на экран выводится 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