Future 异步函数的返回值问题

Posted

技术标签:

【中文标题】Future 异步函数的返回值问题【英文标题】:Problem with the return value from a Future async function 【发布时间】:2019-10-08 06:34:08 【问题描述】:

我创建了一个从 api 获取 json 的函数。问题是该函数没有返回值。它返回“未来的实例......”

我尝试了不同的方法来解决它。如果我打印应该返回的值 (print(extractdata[1])) 它实际上会返回它应该返回的值:


   id: 2
   name: Sala 2,
   beds: [
       
           id: 3,
           name: Cama 3,
           paciente: null
       ,
       
           id: 4,
           name: Cama 4,
           paciente: null
       
   ]


Future <List> getRoom() async 
    SharedPreferences prefs = await SharedPreferences.getInstance();
    var _token = prefs.getString('token');
    final response = await http.get('http://10.0.2.2:8000/api/room/',
    headers: 'Authorization':'JWT $_token'
    ).then((res)
      var extractdata = JSON.jsonDecode(res.body);
      return extractdata;
    );
  

我希望输出是所有房间的列表,但它返回的是“未来实例...”。 如果我尝试获取长度,如果我在函数内打印它,它会起作用,但如果我调用函数然后询问长度,它就不起作用。

【问题讨论】:

【参考方案1】:

由于您使用的是 async/await,因此您不需要使用then

Future <List> getRoom() async 
    SharedPreferences prefs = await SharedPreferences.getInstance();
    var _token = prefs.getString('token');

    final response = await http.get('http://10.0.2.2:8000/api/room/',
        headers: 'Authorization':'JWT $_token'
    );

    var extractdata = JSON.jsonDecode(response.body);
    return extractdata;

【讨论】:

我尝试了你的建议,但它仍然检索“接收者:未来实例 请更新问题并添加您的代码现在如何 谢谢。我在我的代码中添加了一个 Future Builder,现在它可以正确获取列表。

以上是关于Future 异步函数的返回值问题的主要内容,如果未能解决你的问题,请参考以下文章

Callable和Future

十获取异步线程返回值Callable

抽象一个与其 Future 对应的同步函数

Flutter/Dart - 调用一个 Future<String> ...但只需要返回一个 String 的函数

flutter async和await原理解析

C++11 多线程 asyncfuturepackaged_taskpromise