gpt4 book ai didi

dart - Future.then()执行得太早

转载 作者:行者123 更新时间:2023-12-03 03:25:58 26 4
gpt4 key购买 nike

我有一个方法应该返回一个Future,其中包含组列表。
这可以正常工作,因为我可以在该方法本身中循环访问组列表,但是以某种方式会返回list,然后才能填充它。当然这是我的错误,但我似乎无法理解自己在做什么。

Future< List<GroupData> > getGroups(String uniqueUserID) async
List<GroupData> groups = new List<GroupData>();

try {
var result = Firestore.instance
.collection("groups")
.where("members", arrayContains: uniqueUserID);

result.snapshots()
.listen (
(data) {
// Handle all documents one by one
for (DocumentSnapshot ds in data.documents)
{
List<String> members = new List<String>();
for (dynamic member in ds.data['members'])
{
members.add( member );
}

groups.add( new GroupData(ds.data['name'], ds.data['description'], ds.documentID.toString(), ds.data['admin'], members) );
}
}
);

} catch (exception)
{
print ('Something went wrong while fetching the groups of user ' + uniqueUserID + ' !');
}

return groups;

}

使用 Future.then()方法调用此方法,但是列表应该为空,而应该有几个结果(而且,我可以在上述方法中循环列表中的所有项目并访问/打印其数据)。我想念什么?

最佳答案

函数的执行永远不会被锁定。它不会等到您的收听流结束。

有几种解决方案:

  • stream.listen更改为await for (final item in stream)
  • 添加一个await stream.done

  • 例:

    之前:

    Stream<List<T>> stream;

    stream.listen((list) {
    for (final item in list) {
    print(item);
    }
    });

    后:

    await for (final list in stream) {
    for (final item in list) {
    print(item);
    }
    }

    关于dart - Future.then()执行得太早,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57225389/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com