gpt4 book ai didi

dart - 需要来自dart(http客户端)中另一个异步功能的高效异步功能

转载 作者:行者123 更新时间:2023-12-03 04:58:19 25 4
gpt4 key购买 nike

在这里Dart - Request GET with cookie,我们有一个使用dart内置HTTP库执行get请求的示例:

exampleCall() {
HttpClient client = new HttpClient();
HttpClientRequest clientRequest =
await client.getUrl(Uri.parse("http: //www.example.com/"));
clientRequest.cookies.add(Cookie("sessionid", "asdasdasqqwd"));
HttpClientResponse clientResponse = await clientRequest.close();
}

如您所见,需要多次等待。这意味着,如果我尝试进行多个并发的 exampleCall调用,它们将不会同时发生。

我无法返回 future ,因为我必须等待 client.getUrl()才能执行 clientResponse

我也找不到在http调用上使用cookie的好选择。 Dio似乎仅支持从服务器存储cookie。无论如何,我想知道如何使用这种方法,但是如果有更好的方法,我想知道。

最佳答案

As you can see, multiple awaits are needed. Which means that if I try to do multiple concurrent exampleCall calls, they won't happen at the same time.



不太确定您在这里的意思。 Dart是单线程的,因此“同时”发生事情的概念有些夸张。但是,如果稍后再执行该示例,则应该可以多次调用 exampleCall(),而无需彼此等待。

I cannot return a future because I must wait the client.getUrl() in order to do the clientResponse.



是的,如果您将方法标记为 async,则可以:
import 'dart:convert';
import 'dart:io';

Future<List<String>> exampleCall() async {
final client = HttpClient();
final clientRequest =
await client.getUrl(Uri.parse("http://www.example.com/"));
clientRequest.cookies.add(Cookie("sessionid", "asdasdasqqwd"));
final clientResponse = await clientRequest.close();

return clientResponse
.transform(utf8.decoder)
.transform(const LineSplitter())
.toList();
}
async方法的全部要点是能够轻松地将多个异步调用 bundle 到一个 Future中。请注意, async方法必须始终返回Future,但是您的 return语句不一定必须返回 Future对象(如果返回普通对象,它将自动打包为 Future)。

I also couldn't find a good alternative to use cookies on http calls. Dio seems to only support storing cookies from the server. Anyways, I'd like to know how to do in this way, but if there's a better way I'd like to know.



不太确定整个Cookie的情况。 :)

关于dart - 需要来自dart(http客户端)中另一个异步功能的高效异步功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60142966/

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