高效异步函数,需要dart(http客户端)中另一个异步函数的结果
在这里,我们有一个使用dart内置HTTP库执行get请求的示例:高效异步函数,需要dart(http客户端)中另一个异步函数的结果,dart,Dart,在这里,我们有一个使用dart内置HTTP库执行get请求的示例: exampleCall() { HttpClient client = new HttpClient(); HttpClientRequest clientRequest = await client.getUrl(Uri.parse("http: //www.example.com/")); clientRequest.cookies.add(Cookie("sessionid", "asdasdasq
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
调用,它们不会同时发生
我无法返回未来,因为我必须等待客户端.getUrl()
才能执行客户端响应
我也找不到在http调用上使用cookie的好方法。Dio似乎只支持存储来自服务器的cookie。不管怎样,我想知道如何用这种方法,但如果有更好的方法,我想知道
如您所见,需要多次等待。这意味着如果我尝试同时执行多个exampleCall调用,它们不会同时发生
我不太明白你的意思。Dart是单线程的,所以“同时发生”的概念有点夸张。但是,如果您稍后遵循该示例,您应该能够多次调用exampleCall()
,而无需彼此等待
我无法返回future,因为我必须等待client.getUrl()才能执行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();
}
导入'dart:convert';
导入“dart:io”;
Future exampleCall()异步{
最终客户机=HttpClient();
最终客户请求=
等待client.getUrl(Uri.parse(“http://www.example.com/"));
添加(Cookie(“sessionid”、“asdasdasqqwd”);
final clientResponse=等待clientRequest.close();
返回clientResponse
.变换(utf8.解码器)
.transform(常量LineSplitter())
.toList();
}
async
方法的全部要点是能够轻松地将多个异步调用捆绑到一个未来的中。请注意,async
方法必须始终返回Future,但您的return
语句不一定返回Future
对象(如果返回普通对象,它将自动打包到Future
)
我也找不到在http调用上使用cookie的好方法。Dio似乎只支持存储来自服务器的cookie。不管怎样,我想知道如何用这种方法,但如果有更好的方法,我想知道
不太清楚整个饼干的情况。:)