firebase函数状态暂挂并返回未定义

时间:2018-07-06 17:58:31

标签: reactjs firebase

我正在尝试创建一个输入表单,以检查数据是否存在于Firebase数据库中,下面是我用来检查数据的代码:

    if(element.validation.codeunique) {
       function checkCode(inputcode) {
          firebaseUsers.orderByChild('code')
          .equalTo(inputcode).once('value')
          .then( snapshot => {
              let thecode = null;
              if(snapshot.val()){
                  thecode = false;
              } else {
                  thecode = true;
              }
              console.log(thecode)
          })
       }
       let checkcode = null;
       checkcode = checkCode(element.value);
       console.log(checkcode)
       const valid = checkcode;
       const message = `${!valid ? 'Code Exists':''}`;
       error = !valid ? [valid,message] : error
   }



在数据库中,我有一个数据:
用户
-L3ZeHOI7XOmP9xhPkwX
-code:“ DEM”


当我以以下格式输入数据 DEM 时:
console.log(代码)结果为假(这是我想要的结果)



当我以
形式输入另一个数据 ASD 时: console.log(代码)结果为true(这是我想要的结果)



所以firebaseUsers实际上是在向我提供我想要的反馈/数据,
但是当我尝试使用true / false使数据有效时,

这是我最初使用的代码:

if(element.validation.codeunique) {
    function checkCode(inputcode) {
        firebaseUsers.orderByChild('code')
        .equalTo(inputcode).once('value')
        .then( snapshot => {
            if(snapshot.val()){
                return false;
            } else {
                return true;
            }
        })
    }
    const valid = checkCode(element.value);
    const message = `${!valid ? 'Code Exists':''}`;
    error = !valid ? [valid,message] : error
 }


有效显示=未定义,
我的目标是让有效节目显示为真/假,
有人可以帮我,指出我做错了什么吗?

*我编写第一个代码只是为了指出Firebase实际上正在工作
*第二个代码是我最初使用的代码

2 个答案:

答案 0 :(得分:0)

有些问题对我很重要。

首先,您最初使用的代码是在函数的return条件中使用if / else。我相信这是正确的,您将需要回去做。

第二,您正在调用的firebase.orderByChild()函数是一个Promise,因为它附加了一个.then()语句。这意味着该函数不会同步完成执行并返回值。在firebase函数仍在处理时,正在运行该promise下方的代码。

试一下,看看它是否有效,以及是否有超出承诺的其他错误。

if(element.validation.codeunique) {

   function checkCode(inputcode) {
      firebaseUsers.orderByChild('code')
      .equalTo(inputcode).once('value')
      .then( snapshot => {
          if(snapshot.val()){
              return false;
          } else {
              return true;
          }
          console.log(thecode)
      })

  }
  let message = checkCode(element.value) ? 'Code Exists':'Code Does not Exist';
}

答案 1 :(得分:0)

我已经在上面的函数之外完成了此操作,并在用户提交表单时对其进行了检查,如果代码存在,我将其再次定向为表单:

if (userEmail.count == 0 || userPassword.count == 0 || 
userRepeatPassword.count == 0)
    {
        // Display Alert Message
        displayMyAlertMessage(userMessage:"All fields are required")
        return
    }else{

 //Check if passwords match
    if (userPassword != userRepeatPassword)
    {
        // Display an alert message
        displayMyAlertMessage(userMessage:"Passwords do not match")
        return
    }

}

    // Store data
    UserDefaults.standard.set(userEmail, forKey:"userEmail")
    UserDefaults.standard.set(userPassword, forKey:"userPassword")
    UserDefaults.standard.synchronize()

希望这会对某人有所帮助