Могу ли я использовать Dart async/await для отправки запросов в браузере?
Я использую этот пример https://webdev.dartlang.org/articles/get-data/json-web-service в качестве отправной точки для разработки приложения Dart, использующего данные конечных точек API:
void saveData() {
HttpRequest request = new HttpRequest(); // create a new XHR
// add an event handler that is called when the request finishes
request.onReadyStateChange.listen((_) {
if (request.readyState == HttpRequest.DONE &&
(request.status == 200 || request.status == 0)) {
// data saved OK.
print(request.responseText); // output the response from the server
}
});
// POST the data to the server
var url = "http://127.0.0.1:8080/programming-languages";
request.open("POST", url, async: false);
String jsonData = '{"language":"dart"}'; // etc...
request.send(jsonData); // perform the async POST
}
Я вижу это как традиционный обратный вызов, запускаемый, когда что-то происходит. Здесь он выполняется при получении ответа.
Тем не менее, я хочу попробовать другой подход, например, использовать Futures / Promises или async/await.
Можно ли превратить этот пример в любую из этих альтернатив в браузере?
Если да, не могли бы вы показать пример того, как он выглядит, когда реализован как Future или async/await?
1 ответ
Я согласен с @Pacane об использовании пакета http. Это обеспечивает намного более чистый API для работы с http
запросы, которые позволяют легко использовать async / await.
Тем не менее, вы могли бы написать saveData
используя только основные библиотеки следующим образом (пример dartpad здесь: https://dartpad.dartlang.org/2ed9e39fd887b58532d42a70697ce9cd)
Future<Null> saveData() async {
var response = await HttpRequest.postFormData(
'http://127.0.0.1:8080/programming-languages',
{'language': 'Dart'});
print(response.responseText);
}