【问题标题】:Int in a For loop inside future not incrementing Flutter/Firestore未来的 For 循环中的 Int 不会增加 Flutter/Firestore
【发布时间】:2021-11-11 16:05:25
【问题描述】:

我正在尝试使用 for 循环设置许多 Firestore 文档,并使用递增变量,但这个变量不像它那样递增... 这是代码

int debutRdv = 0;

).then((valueEnregistrement) => {
 for(PrestationSelected prestaSelect in prestaSelected){
  rdvService.createRdv(
   cli: cli, 
   debutRdv: debutRdv, 
   heureCreneau: heureCreneau, 
   prestaSelect: prestaSelect, 
   valueEnregistrement: valueEnregistrement
  )
  .then((valueRdv) => {
   for (int i = 0; i < prestaSelect.duree; i += 15){
    rdvService.createCreneau(
     debutRdv: debutRdv, 
     heureCreneau: heureCreneau, 
     i: i, 
     prestaSelect: prestaSelect, 
     valueRdv: valueRdv
    )
   },
   debutRdv = debutRdv += prestaSelect.duree
   })
  },

事实是变量首次亮相Rdv 并没有像我想要的那样递增。它在第二个循环 (createCreneau) 中正确递增,但在第一个循环 (createRdv) 中不正确。这就像函数 createRdv 在运行“then”之前运行的次数与我的列表 prestaSelected 的长度一样多...... 我真的不明白发生了什么。

例如结果应该是:

*debutRdv Rdv1 = 0  
debutRdv Rdv1Creneau 1 = 0  
debutRdv Rdv1Creneau 2 = 0  
debutRdv Rdv2 = 30  
debutRdv Rdv2Creneau 1 = 30  
debutRdv Rdv2Creneau 2 = 30*  

但它是:

*debutRdv Rdv1 = 0  
debutRdv Rdv1Creneau 1 = 0  
debutRdv Rdv1Creneau 2 = 0  
debutRdv Rdv2 = 0  
debutRdv Rdv2Creneau 1 = 30  
debutRdv Rdv2Creneau 2 = 30*  

请帮忙。

【问题讨论】:

  • 只是一个建议:我发现 async/await 语法比 'then' 语法更容易调试和阅读。我建议进行此更改,因为您使用 For 循环嵌套了 Futures,这将很快变得复杂。

标签: flutter for-loop google-cloud-firestore future


【解决方案1】:

问题:您的第一个 for-in 语句不会等待 rdvService.createRdv().then() 在移动到下一个项目之前完成,这会导致不确定(不可预测) 函数的执行顺序。

我不知道如何使用 then() 来做你想做的事情——我不确定它是否真的可能。您可以使用 async/await 而不是 then() 使用 for 或 for-in 来完成。 (当我需要 Dart 中的确定性迭代器以使用常规 for 循环(如第二个循环)时,我了解到。)如果您想尝试 async/await,有一个 article here 涵盖异步编程以及 for-in 和 forEach 循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-09
    • 2012-11-26
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多