For loop 可以在Dart中等待for循环吗?

For loop 可以在Dart中等待for循环吗?,for-loop,asynchronous,flutter,dart,future,For Loop,Asynchronous,Flutter,Dart,Future,我是Dart新手,因此在异步编程方面遇到了问题。我试图循环浏览元素列表(现在我们称之为配料),并查询数据库中包含该配料的配方。为了实现这一点,我有一个列表“IngCreditsSelectedList”,并将其传递给一个未来的数据库,该数据库应该查询Firestore数据库并将结果添加到“可能参与者”列表中。问题是,在返回“可能的参与者”列表之前,我不知道如何“等待”for循环完成。每次我运行它时,它都返回一个空列表。希望我没有把它弄得太复杂,提前感谢所有花时间阅读本文的人:) PS:我花了几个

我是Dart新手,因此在异步编程方面遇到了问题。我试图循环浏览元素列表(现在我们称之为配料),并查询数据库中包含该配料的配方。为了实现这一点,我有一个列表“IngCreditsSelectedList”,并将其传递给一个未来的数据库,该数据库应该查询Firestore数据库并将结果添加到“可能参与者”列表中。问题是,在返回“可能的参与者”列表之前,我不知道如何“等待”for循环完成。每次我运行它时,它都返回一个空列表。希望我没有把它弄得太复杂,提前感谢所有花时间阅读本文的人:)

PS:我花了几个小时在网上寻找解决方案,但什么都找不到

Future searchRecipe(ingredients) async {
    var possibleRecipes = []; //List to store results
    for (int i = 0; i < ingredients.length; ++i) {
      var currentIngredient = ingredients[i];
      //now query database for recipes with current ingredient
      var fittingRecipes = Firestore.instance
          .collection('recipes-01')
          .where('ingr.$currentIngredient', isEqualTo: true);
      fittingRecipes.snapshots().listen((data) => data.documents.forEach((doc) {
            possibleRecipes.add(doc['name']); //add names of results to the list
          }));
    }
    return possibleRecipes; //this returns an empty list
}
未来搜索配方(配料)异步{
var possibleRecipes=[];//用于存储结果的列表
对于(int i=0;i<0.length;++i){
var CurrentComponent=成分[i];
//现在查询数据库中当前成分的配方
var fittingRecipes=Firestore.instance
.collection('recipes-01')
其中('ingr.$CurrentComponent',isEqualTo:true);
fittingRecipes.snapshots().listen((数据)=>data.documents.forEach((文档){
possibleRecipes.add(doc['name']);//将结果的名称添加到列表中
}));
}
return possibleRecipes;//返回一个空列表
}
是的,你可以

只需使用此代码

Future searchRecipe( List ingredients) async {
var possibleRecipes = []; //List to store results


 ingredients.forEach((currentIngredient) async{
//you can await anything here. e.g  await Navigator.push(context, something);
      //now query database for recipes with current ingredient
      var fittingRecipes = await Firestore.instance
          .collection('recipes-01')
          .where('ingr.$currentIngredient', isEqualTo: true);
      fittingRecipes.snapshots().listen((data) => data.documents.forEach((doc) {
            possibleRecipes.add(doc['name']); //add names of results to the list
          }));
    });
    return possibleRecipes; //this returns an empty list
}

但是问题作者需要记住的是,函数仍然是一个未来,因此无论内部做了什么,调用方都将以任何方式获得未来。感谢您花时间帮助一位没有经验的新手:D不幸的是,函数仍然返回空列表:/I我想这是因为调用了return get在forEach循环完成之前。你知道怎么解决这个问题吗?再次感谢您的帮助:)