【问题标题】:Returning a String from an async从异步返回字符串
【发布时间】:2016-02-27 13:54:35
【问题描述】:

我想从异步函数返回一个字符串,但我得到了一个 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;

}

错误:

类型“_Future”不是“响应”的“字符串”类型的子类型。

【问题讨论】:

    标签: dart dart-async


    【解决方案1】:

    这是从具有返回类型Future&lt;Type&gt;的函数中获取值的两种简单方法

    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);
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-20
        • 1970-01-01
        相关资源
        最近更新 更多