2

我使用此示例https://webdev.dartlang.org/articles/get-data/json-web-service作为开发使用 API 端点数据的 Dart 应用程序的起点:

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 时的外观?

4

1 回答 1

2

我同意@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);
}
于 2017-02-06T18:25:38.833 回答