从异步中返回一个字符串

时间:2015-11-24 22:41:20

标签: dart dart-async

我想从异步函数返回一个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&#39; _Future&#39;不是类型&#39;字符串&#39;的子类型。回应&#39;。

2 个答案:

答案 0 :(得分:7)

使用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

答案 1 :(得分:0)

这是从返回类型为Future<Type>的函数中获取值的简单两种方法

1-第一种方式(最佳方式,因为您可以从任何文件调用此代码

FutureFunctionName.then((val) {
      val contains data
    });

例如-(我要从真实示例中发布一个

Future<String> getUserAgents() async {
  String userAgent;
  await FlutterUserAgent.init();
  userAgent = FlutterUserAgent.webViewUserAgent;
  return userAgent;
}
String userAgent;
getUserAgents().then((val) {
   userAgent = val;
});
print(userAgent); // you will get output

2-第二种方式(使用全局变量获取数据

String userAgent;
Future<void> getUserAgents() async {
  await FlutterUserAgent.init();
  userAgent = FlutterUserAgent.webViewUserAgent;
}
print(userAgent);