# #flutter #for-loop #google-cloud-firestore #future
Вопрос:
Я пытаюсь установить множество документов Firestore с циклом for, с увеличивающейся переменной, но этот не увеличивается, как это происходит… Вот код
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
})
},
Дело в том, что переменная debutRdv не увеличивается, как я хочу. Он правильно увеличивается во втором цикле (createCreneau), но не в первом цикле (createRdv). Это похоже на то, что функция createRdv выполнялась столько раз, сколько длился мой предварительно выбранный список, прежде чем запустить «тогда»…
Я действительно не понимаю, что происходит.
Например, результат должен быть :
*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*
Пожалуйста, помогите.
Комментарии:
1. Просто предложение: я нахожу синтаксис async/await более легким для отладки и чтения, чем синтаксис «тогда». Я предлагаю это изменение, потому что у вас есть вложенные фьючерсы с циклами For, и это быстро усложнится.
Ответ №1:
Проблема: ваша первая инструкция для входа не будет ждать завершения rdvService.createRdv().затем() перед переходом к следующему элементу, что приводит к неопределенному (непредсказуемому) порядку выполнения ваших функций.
Я не знаю, как сделать то, что вы пытаетесь сделать, используя then() для фьючерсов — я не уверен, что это действительно возможно. Вы можете сделать это с помощью for или for-in, используя async/await вместо then(). (Я научился, когда мне нужны детерминированные итераторы в Dart, использовать регулярные циклы, такие как ваш второй цикл.) Если вы хотите попробовать async/await, здесь есть статья, в которой рассказывается об асинхронном программировании, циклах ввода и вывода.