gpt4 book ai didi

firebase - 如何返回 future -Flutter

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

我有一个名为getAvctUODoss()的函数,该函数应该返回Future<double>,但始终返回0.0。如果我在forEach循环中添加print('sum');,我会看到该代码有效,只是为了返回它,我遇到了一些困难。我需要在另一个函数中使用此函数的结果,但是,由于返回错误,无法继续。我认为我的错误在于将sum声明为 double 型,但我不知道如何解决此问题。我在Stack Overflow上进行了搜索,但是我只找到了打印forEach循环内的值的代码。
预先感谢您的宝贵帮助。
这是我的两个函数的代码:

  Future<double> getAvctUODoss(String numDoss) async {
double sum = 0.0; // I think the problem is in this declaration

affaireCollection
.document(numDoss.substring(0, 7))
.collection('dossiers')
.document(numDoss)
.collection('rp')
.getDocuments()
.then((querySnapshot) {
querySnapshot.documents.forEach((documentSnapshot) async {
sum += await documentSnapshot.data['avct'] *
(await documentSnapshot.data['UO_AT'] +
await documentSnapshot.data['UO_CH']);
});
});
return sum; //return always 0.0
}

Future updateAvctDoss(String numDoss) async {
await affaireCollection
.document(numDoss.substring(0, 7))
.collection('dossiers')
.document(numDoss)
.updateData({
'avct': await getAvctUODoss(numDoss) / await getTotalUODoss(numDoss)
});
}

最佳答案

将功能更改为以下内容:

  Future<double> getAvctUODoss(String numDoss) async {
double sum = 0.0;

QuerySnapshot querySnapshot = await affaireCollection
.document(numDoss.substring(0, 7))
.collection('dossiers')
.document(numDoss)
.collection('rp')
.getDocuments();
querySnapshot.documents.forEach((documentSnapshot){
sum += documentSnapshot.data['avct'] *
(documentSnapshot.data['UO_AT'] +
documentSnapshot.data['UO_CH']);
});
return sum;
}
由于您声明了 async函数,因此,不要使用 then(),而要使用 await等待数据完全检索,然后 sum将被更新并返回数据。

关于firebase - 如何返回 future <double>-Flutter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62549232/

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