【问题标题】:how can I use Future/Async function in a loop? (dart/flutter)如何在循环中使用 Future/Async 函数? (飞镖/颤振)
【发布时间】:2020-10-22 21:13:06
【问题描述】:
        String random_username ;
        bool available = false;
        int n = 0;
        do{
          random_username = SuperHero.random()+(n.toString());
          n = n+1;
          print(random_username);
          checkUsernameAvailable(random_username).then((value){
            available = value;
          });
        }while(!available);

我想做的是当一个新用户在 Firebase Auth 中注册时,我想为该用户创建一个随机用户名,以后可以更改。 此代码应该生成一个用户名,检查它是否已经在 firebase 数据库中。如果否,则离开循环,否则添加后缀号并重试。 (我错误地将名称生成器放在循环中,所以每次它都会得到一个新名称,现在没关系)。 checkUsernameAvailable 如果不匹配,即可用,则返回“true”。反之亦然。

问题是循环永远持续下去。这可能是由于异步方法,即 checkUsernameAvailable。 请帮忙。

【问题讨论】:

  • 检查Future.doWhile

标签: firebase flutter asynchronous dart async-await


【解决方案1】:

你可以使用Future.doWhile()方法,重复执行一个操作直到返回false

Future.doWhile(() async {
  final random_username = SuperHero.random() + (n.toString());
  n = n + 1;
  print(random_username);
  return !(await checkUsernameAvailable(random_username));
});

【讨论】:

  • 错误:否定操作数必须具有静态类型“bool”。尝试将操作数更改为“!” operator.dart(non_bool_negation_expression)。实际上 checkUsernameAvailable 返回一个 Future。是这个问题吗?
  • 答案已更新,您需要等待结果,因为我们返回它的否定。
猜你喜欢
  • 2020-05-12
  • 2020-11-28
  • 1970-01-01
  • 2020-12-28
  • 2020-08-12
  • 2020-11-05
  • 2018-09-10
  • 1970-01-01
  • 2020-01-28
相关资源
最近更新 更多