Javascript 如何在“中传递布尔结果”;如果条件是“;

Javascript 如何在“中传递布尔结果”;如果条件是“;,javascript,firebase,firebase-realtime-database,firebase-authentication,ionic3,Javascript,Firebase,Firebase Realtime Database,Firebase Authentication,Ionic3,我的ionic应用程序中有一个功能,可以检查firebase数据库中是否已经存在用户电子邮件 checkValidEmail(email):any{ let result=this.userService.getUserByEmail(email); console.log(result); result.subscribe((k:User[])=>{ if(k.length>0){ return true; }el

我的ionic应用程序中有一个功能,可以检查firebase数据库中是否已经存在用户电子邮件

  checkValidEmail(email):any{
    let result=this.userService.getUserByEmail(email);
    console.log(result);
    result.subscribe((k:User[])=>{
      if(k.length>0){
        return true;
      }else{
        return false;
      }
    });
  }
我试图在下面的if条件中传递它的boolen结果,以检查输入的电子邮件地址是否已经存在于数据库中。如果存在,则显示错误

if(this.checkValidEmail(this.user.email)){
      console.log("Error : Already has this email address ");
      this.error ="Already has this email address in out system";
    }

但是如果(this.checkValidEmail(this.user.email)),我无法将
true
false
输入
。请帮助我了解这一点。

结果对象是一个异步流,订阅回调稍后会触发,因此
checkValidEmail
不会返回结果。 您可以使用回调并触发该回调,也可以使用承诺RxJS可观测值

为了简单起见,我用一个简单的回调函数修改了您的代码

  checkValidEmail(email,resultCallback){
    let result=this.userService.getUserByEmail(email);
    console.log(result);
    result.subscribe((k:User[])=>{
      if(k.length>0){
        resultCallback(true);
      }else{
        resultCallback(false);
      }
    });
  }
修改代码如下

    this.checkValidEmail(this.user.email,(isError)=>{
        if (isError){
          console.log("Error : Already has this email address ");
          this.error ="Already has this email address in out system";
        }


});

我不熟悉这里使用的库,但是
checkValidEmail
看起来是异步的。如果是这样的话,您需要返回一个值的承诺,并添加一个完成回调。可能重复我建议的重复,因为我非常确定这是事实。请提供更多详细信息。我在这方面是新手。@Prasheel这是错误的,即使
subscribe
是同步的。他们从不从
checkValidEmail
返回任何内容。