1

this.verifyUserTokenブロック内のコードは実行されませんです。私はそれは、非同期呼び出しは、返されたデータが準備ができていないということと関係していると思うが、私はそれについて行く方法を知らないようだ。 verifyUserToken以来コード内部では一度も実行されていませんangularjs

this.verifyUserToken = function(){ 
      //Check if token matches existing token and if verified is true 
      ref.orderByChild('token').equalTo(this.token).once('value'). 
      then(function(dataSnapshot){ 
       //If token matches 
        if(dataSnapshot.val()){ 
         alert("Token Exists",dataSnapshot.val().token); 
         $scope.isVerified = "YES"; 
        }else{ 
         alert("Token does not exist",dataSnapshot.val()); 
         $scope.isVerified = "NO"; 
        } 
      }); 
     } 

this.registerUser = function(){ 
      console.log("Entered registerUser()"); 

      this.verifyUserToken(); 
      alert("The Value of isVerified:"+ $scope.isVerified); 
      if($scope.isVerified == "YES"){ 
        alert("Verifying User Token...",this.verifyUserToken()); 
        $scope.auth.$createUser({ 
        "email": this.email, 
        "password" : this.password 
       }).then(function(userData){ 
        alert("Successfully created user account with uid:", userData.uid); 
        //redirect to /userlogin if registration is successful 
        //this.changeVerifiedStatus(); 
        alert("User verifed and changed"); 
        $location.path('/userlogin'); 
       }).catch(function(error){ 
        alert("Error Creating User:",error); 
       }); 
      }else{ 
       alert("Token failed verification"); 
      } 
      }; 
+0

verifyUserTokenのコールバックに確認を入れる必要があります。現在のところそのまま継続されます。確認されているのは常にnull null – Zaki

+0

私の答えがあなたのために働くか、まだ疑問がある場合は教えてください。 :) – adolfosrs

答えて

0

は、この関数からPromiseを返すそれを扱うだけTHERは、通話が終了し確認した後、あなたのregisterUserを進めることができfirebaseするassyncコールを持っています。

私はjsFiddleを設定していますので、正常に動作しています。

this.verifyUserToken = function(){ 
    //Check if token matches existing token and if verified is true 
    var verifyUserTokenPromise = new Promise(function(resolve, reject){            
    ref.orderByChild('token').equalTo(this.token).once('value').then(function(dataSnapshot){ 
     //If token matches 
      if(dataSnapshot.val()){ 
       alert("Token Exists",dataSnapshot.val().token); 
       $scope.isVerified = "YES"; 
      }else{ 
       alert("Token does not exist",dataSnapshot.val()); 
       $scope.isVerified = "NO"; 
      } 
      //resolve the promise. you can pass any data here 
      resolve($scope.isVerified); 
    }); 
    }); 
    return verifyUserTokenPromise; 
}; 

this.registerUser = function(){ 
    console.log("Entered registerUser()"); 

    this.verifyUserToken().then(function(result){ 
    alert("The Value of isVerified:"+ $scope.isVerified); 
    if($scope.isVerified == "YES"){ 
      alert("Verifying User Token...",this.verifyUserToken()); 
      $scope.auth.$createUser({ 
      "email": this.email, 
      "password" : this.password 
     }).then(function(userData){ 
      alert("Successfully created user account with uid:", userData.uid); 
      //redirect to /userlogin if registration is successful 
      //this.changeVerifiedStatus(); 
      alert("User verifed and changed"); 
      $location.path('/userlogin'); 
     }).catch(function(error){ 
      alert("Error Creating User:",error); 
     }); 
    }else{ 
     alert("Token failed verification"); 
    } 
    }) 
}; 
+0

ありがとう@adolfosrs、私は訂正をしましたが、今はまったく異なるエラーに直面しています。 ** Uncaught(約束)TypeError:未定義**のプロパティ 'token'を読み取ることができません。助けてください – user1841445

+0

@ user1841445あなたのコードでは 'this.token'を使っていましたが、テスト用に' token'に変更しました。元のもののためにロールバックしようとしました。あなたはこの情報がどこから来たのかを含めなかったので、これはあなたの実装に依存します。 – adolfosrs

+0

私はすでに 'token'を' this.token'に置き換えました。エラーはこの行 'ref.orderByChild( 'token')からです。equalTo(this.token).once( 'value')。then(function(dataSnapshot){...' – user1841445

関連する問題