Могу ли я использовать 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);
}
Другие вопросы по тегам