从异步中返回一个字符串

问题描述 投票:4回答:1

我想从异步函数返回一个String,但我得到一个Future我做错了什么;

main() {
  String s;
  s = dummy("http://www.google.com");
}

String dummy(String s) {
  String response;
  response = readURL(s);
  return response;
}


Future<String> readURL(String requestString) async {
  String response = await http.read(requestString);
  print(response);
  return response;

}

错误:

type'_Future'不是'response'类型'String'的子类型。

dart dart-async
1个回答
8
投票

使用async注释的函数将始终返回Future。

所以当你打电话给readUrl(s)时,你可以await的结果。

要使用await,调用者(这里是您的主要功能)必须标记为async。所以最终结果可能如下所示:

main() async {
  String s = await dummy("http://www.google.com");
}

Future<String> dummy(String s) async {
  String response = await readURL(s);
  return (response);
}

Future<String> readURL(String requestString) async {
  String response = await http.read(requestString);
  print(response);
  return(response);
}

需要注意的是:如果在函数中使用await,它现在被视为返回Future的函数。因此,您转换为async的每个函数现在将返回Future

© www.soinside.com 2019 - 2024. All rights reserved.