无法从函数中获取价值,即使我有一个非常相似的函数。 - 颤振

Posted

技术标签:

【中文标题】无法从函数中获取价值,即使我有一个非常相似的函数。 - 颤振【英文标题】:Cannot get value out of the function, even though I have a very similar one that works. - Flutter 【发布时间】:2020-10-10 04:24:36 【问题描述】:

所以这第一个不起作用。我正在获取快照并迭代以构建值列表,然后我想将这些值用于其他地方。有任何想法吗?第二个几乎相同,并且可以正常工作。

getAllFavoriteRecipes(RecipeNotifier recipeNotifier, favoriteIDs) async 
  var uid = (await AuthServices().getCurrentUser());
  Stream<DocumentSnapshot> favorites =
  Firestore.instance.collection('users').document(uid).snapshots();
  List _favorites = [];
  favorites.forEach((item) 
    var favoriteItem = item.data['favorites'];
    _favorites.add(favoriteItem);
    print('_favorites: $_favorites'); //<<This does print correctly>>>
  );
  List favoriteIDs2 = _favorites;
  print('Hello: $_favorites'); //<<<<<does NOT print correctly>>>>>
  print('Test: $favoriteIDs2'); //<<<<<does NOT print correctly>>>>>

  QuerySnapshot snapshot = await Firestore.instance
      .collection('recipes')
      .where('recipeID', whereIn: favoriteIDs2)
      .getDocuments();
  List<RecipeList> _recipes = [];
  snapshot.documents.forEach((document) 
    RecipeList recipe = RecipeList.fromMap(document.data);
    _recipes.add(recipe);
  );
  recipeNotifier.recipeList = _recipes;

这个打印正确,虽然他们在做同样的事情:

QuerySnapshot featured =
      await Firestore.instance.collection('featured').getDocuments();
  List _featured = [];
  featured.documents.forEach((document) 
    var featuredItem = document.data['recipeID'];
    _featured.add(featuredItem);
  );

  List featuredIDs = _featured;
  print(featuredIDs); 

【问题讨论】:

【参考方案1】:

看起来forEach() 返回一个 Future,您可以使用 await,就像您使用 getDocuments() 返回的 Future。

  Stream<DocumentSnapshot> favorites =
      Firestore.instance.collection('users').document(uid).snapshots();
  List _favorites = [];
  await favorites.forEach((item) 
    var favoriteItem = item.data['favorites'];
    _favorites.add(favoriteItem);
    //print('_favorites: $_favorites');
  );

  print('Hello: $_favorites'); //<<<<<does NOT print correctly>>>>>

【讨论】:

不幸的是,这没有任何区别。在第一次打印中,它起作用了。在第二个中,它显示一个空列表。

以上是关于无法从函数中获取价值,即使我有一个非常相似的函数。 - 颤振的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Django 视图中获取价值到 Ajax 成功函数中

TypeError:即使 userData 是数组,userData.map 也不是函数

从函数中获取价值

jQuery插件如何从插件内的函数中获取价值

从异步函数返回的承诺中获取价值

从列表中定义函数