gpt4 book ai didi

dart - 如何简单地同步获取 url 主体作为字符串

转载 作者:行者123 更新时间:2023-12-05 00:51:29 30 4
gpt4 key购买 nike

你会如何简单地实现这个功能:

String fetchUrlBodyAsString(String url) {
...
}

用法:

String schema = fetchUrlBodyAsString("http://json-schema.org/draft-04/schema#");

本主题 Using dart to download a file解释了从主函数获取数据的好方法。但是如果你尝试一下,你会发现真正的工作发生在离开 main 之后。我认为使用 HttpClient 很难创建我想要创建的同步函数,因为它试图让异步 api 同步工作。根据这个线程,这可能是不可能的:https://groups.google.com/a/dartlang.org/d/msg/misc/kAgayQyaPhQ/wonJ776_FGIJ

在非浏览器/控制台设置中实现此功能的 Dart 方法是什么?

最佳答案

异步方法的使用真的很有感染力。一旦您开始在函数中使用 Future,您必须返回一个 Future 作为结果。所以你的 fetchUrlBodyAsString 函数看起来像:

import 'dart:io';
import 'dart:async';

Future<String> fetchUrlBodyAsString(String url) =>
new HttpClient().getUrl(Uri.parse(url))
.then((HttpClientRequest request) => request.close())
.then((HttpClientResponse response) =>
response.transform(new StringDecoder()).join());

main() {
final url = "http://json-schema.org/draft-04/schema#";
Future<String> schema = fetchUrlBodyAsString(url);
schema.then(handleContent);
}

handleContent(String content) {
print(content); // or do what you want with content.
}

或使用async/await:

import 'dart:io';
import 'dart:async';

Future<String> fetchUrlBodyAsString(String url) async {
var request = await new HttpClient().getUrl(Uri.parse(url));
var response = await request.close();
return response.transform(new StringDecoder()).join();
}

main() async {
final url = "http://json-schema.org/draft-04/schema#";
handleContent(await fetchUrlBodyAsString(url));
}

handleContent(String content) {
print(content); // or do what you want with content.
}

关于dart - 如何简单地同步获取 url 主体作为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18404489/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com