在这个同步函数上,第二条语句在第一条语句之前运行

Posted

技术标签:

【中文标题】在这个同步函数上,第二条语句在第一条语句之前运行【英文标题】:On this synchronous function second statement is running before 1st statement 【发布时间】:2021-10-06 16:33:55 【问题描述】:
String ok ="/login";
  String _loggedInFunction()
    FirebaseAuth.instance
        .authStateChanges()
        .listen((User? user) 
      if (user == null) 
         ok = "/login";

      else ok = "/home";

      print(ok);


      print(user);

    );
    print("Reading 1st");
    return ok;
  

我无法理解 FirebaseAuth.instance.... 是否是一个异步函数。因为第二个语句在第一个语句之前运行,但是我如何在这里应用“await”关键字,而在 FirebaseAuth.instance 之前应用“await”关键字......它表明它不是未来事件。

我也可以解释一下为什么我不能直接返回 if 语句中的“ok”变量,它显示了一个错误。

如果用户重新启动应用程序,我使用此代码跳过登录。你有什么推荐的代码吗?

以上代码的输出

I/flutter ( 6405): Reading 1st
I/flutter ( 6405): /home

【问题讨论】:

This answer 可能有助于理解 onAuthStateChanged 的​​作用 非常感谢,它节省了我的时间@Dharmaraj 【参考方案1】:

FirebaseAuth.instance.authStateChanges().listen 不是一个承诺,而是一个倾听者。这意味着您不能等待它或使用then 等待它。每次身份验证状态更改时都会触发。你只是在听那些变化。

【讨论】:

以上是关于在这个同步函数上,第二条语句在第一条语句之前运行的主要内容,如果未能解决你的问题,请参考以下文章

顺序执行多条sql,一条执行失败则所有都执行失败;例如第一条成功,第二条失败的话,第一条也失败!急!

两条mybatis sql语句第二条要用到第一条查出来的数据进行模糊查询 怎么整合成一条

SQL语句update中的where条件的用法问题

选择第二条到第四条的sql语句怎么写?

进程互斥与同步

ajax同步,异步