我使用这个示例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实现时的样子吗?
发布于 2017-02-07 02:25:39
我同意@Pacane关于使用http包的观点。它为处理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);
}https://stackoverflow.com/questions/42053734
复制相似问题