Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
高效异步函数,需要dart(http客户端)中另一个异步函数的结果_Dart - Fatal编程技术网

高效异步函数,需要dart(http客户端)中另一个异步函数的结果

高效异步函数,需要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

在这里,我们有一个使用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
调用,它们不会同时发生

我无法返回未来,因为我必须等待
客户端.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。不管怎样,我想知道如何用这种方法,但如果有更好的方法,我想知道

不太清楚整个饼干的情况。:)