如何解决Firebase侦听功能中的代码不会立即执行
我正在尝试侦听数据库更改并更新我的数据。但是问题是该函数没有立即进入我的for
循环内,并且我的函数总是返回null。您有什么想法吗? / p>
Future<InfoCompagnie> getPlace(
{String compagnie,String dep,String arr,String jour,int nbrPlace}) async {
var infoCompagnie = InfoCompagnie().obs;
db
.collection('PLACE')
.document(compagnie)
.collection('$dep-$arr')
.document(jour)
.collection('Bus')
.where('PlaceDisponible',isGreaterThanOrEqualTo: 2)
.snapshots(includeMetadataChanges: true)
.listen((document) {
for (var data in document.documents) {
if (data.exists) {
codeBus = data.data['CodeBus'];
infoCompagnie.update((value) {
value.accessiblePlace = accessiblePlace;
});
return infoCompagnie.value;
} else
return null;
}
});
}
解决方法
触发器的激活取决于不同的情况,例如,取决于您的连接速度和状态,可能需要几百毫秒到几秒钟才能获得该数据。 Firestore会异步加载数据,因为这可能需要一些时间。
如果您想更好地了解其工作原理,请检查此document。
如本documentation中所述,您可以使用带有'async'和'await'关键字的Future编写异步代码。
如果您需要管理同步操作,可以在此document上找到有用的示例,例如:
import 'package:synchronized/synchronized.dart';
main() async {
// Use this object to prevent concurrent access to data
var lock = new Lock();
...
await lock.synchronized(() async {
// Only this block can run (once) until done
...
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。