Я пытаюсь создать очень простой http-сервер, который делает одну вещь. Получив HttpRequest, он выполняет запрос на локальном сервере базы данных и возвращает строку на основе этого запроса.
Я изучаю дартс, и у меня проблемы с пониманием фьючерсов. Я думал, что понял их, но этот пример заставляет меня поверить, что я действительно понятия не имею, как они работают. Итак, я не только ищу решение этой проблемы, но и любые указатели, которые я с радостью приму.
Примечание. Этот код является очень примитивным примером того, что я пытался сделать, и ради обращения к сообществу Stackoverflow я максимально сократил/упростил его, сохранив при этом проблему.
Вот мой код server.dart
import 'dart:io';
import 'package:sqljocky/sqljocky.dart';
final connection = new ConnectionPool(host: 'localhost', port: 3306, user: 'root', password: null, db: 'server1');
main() {
HttpServer.bind(InternetAddress.ANY_IP_V4, 9090)..then((server) {
print("serving generic database query on localhost:9090");
server.listen((request) {
if (request.method == "GET") {
request.response.write(getResults());
request.response.close();
}
else {
request.response.statusCode = HttpStatus.BAD_REQUEST;
}
});
});
}
String getResults() {
StringBuffer sb = new StringBuffer();
sb.write("START--");
connection.query("select name, email, zkey from users")
..then((results) {
results.forEach((row) {
sb.write(row.toString());
print(row.toString());
});
});
sb.write("--END");
print(sb.toString());
return sb.toString();
}
Поэтому, если я отправлю запрос на этот сервер, он вернет «START----END». Сервер выводит ожидаемый результат запроса, а затем выводит «START----END». Это заставляет меня поверить, что мой ответ на запрос закрывается и возвращается до того, как результат запроса будет обработан.
Итак, независимо от того, скручиваю ли я localhost: 9090/asdf или фактически создаю отправителя HTTP-запроса клиента, я не получаю ожидаемого ответа... который является результатом запроса к базе данных.
заранее спасибо