catch 块不返回空值

Posted

技术标签:

【中文标题】catch 块不返回空值【英文标题】:catch block not returning null value 【发布时间】:2020-12-23 22:20:51 【问题描述】:

我正在为 android 开发一个颤振应用程序。我正在尝试通过电子邮件对用户进行身份验证。

Future signInwithEmailAndPassword(String email,String pass) async 
    try
      UserCredential result = await _auth.signInWithEmailAndPassword(email: email, password: pass);
      User user = result.user;
      return _userFromFirebase(user);
    catch(e)
      print('error occured');
      print(e.toString());
      return null;
    
  

这是我使用电子邮件和密码对用户进行身份验证的方法。 问题是 catch 块被执行,错误信息打印在控制台,但是当我处理返回值时它没有返回空值

dynamic result = _authService.signInwithEmailAndPassword(email: email,pass: pass);
                      print(result);
                      if(result==null)
                        
                          setState(() 
                            print('inside setstate');
                          );
                        

当我收到“动态结果”变量中的返回值并打印它时,它显示类型为 Future 。我希望 catch 块返回空值。 如何解决?

【问题讨论】:

试试这个:动态结果 = await _authService.signInwithEmailAndPassword(email: email,pass: pass); @gladiator 谢谢老兄,那是我犯的一个愚蠢的错误,我忘了补充,无论如何谢谢人:) 【参考方案1】:

bcz 正在发生,它不等待结果,我们必须等到我们得到结果。所以,我们需要在它前面放一个 await 关键字。像这样

dynamic result = await _authService.signInwithEmailAndPassword(email: email,pass: pass);

【讨论】:

以上是关于catch 块不返回空值的主要内容,如果未能解决你的问题,请参考以下文章

完成块不返回任何内容

vue返回二次promise

52.finally语句块不执行的唯一情况

HttpResponse返回的值为空

返回 MIN 和 MAX 值并忽略空值 - 使用前面的非空值填充空值

为啥当 == 为空值返回 true 时 >= 返回 false?