2017-09-10 11 views
1

VueとFirebaseでアプリケーションを構築しています。私はFirebaseを初めて使っていて、いくつか問題があります。私は名前+電子メールをデータベースに格納しようとします。私が望むのは、電子メールがすでにデータベースに入っているかどうかを最初に確認し、そうでなければ、名前+電子メールを格納する別の機能を実行することです。電子メールがデータベースに格納されている場合は、アラートを出力して送信をキャンセルしたいと考えています。Firebaseはif/else文でも複数の呼び出しを行います。JS

データベース内の電子メールのチェックが非常にうまくいくので、アラートが出力され、データを取得することもできます。しかし、どこに問題があるのか​​は、データベースにない電子メールを入力するときです。私は新しい電子メール(と名前)を入力すると、データベースをチェックして偽を返しますが、すぐに別の呼び出しを行います(なぜ、私は推測する問題です)。 、 同時に。それは、それが最初の呼び出し(false)の出力だったので、データを格納する別の関数に進みます。

私のJSコード:コンソールの

checkForm() { 

     let app = this; 

     if (this.name == '' || this.emailadress == '') { 
      alert('You have to fill out the form'); 
     } else { 

      app.getFirebase(); 

     } 
}, 

getFirebase() { 

     let app = this; 

     var ref = firebase.database().ref().child('/aanmeldingen/'); 
     ref.on('value', function(snapshot) { 

      const array = []; 

      snapshot.forEach(function(childSnapshot) { 
       var checkEmail = childSnapshot.val().email; 
       array.push(checkEmail); 
      }); 

      const res = array.includes(app.emailadress); 
      console.log(array); 
      console.log(res); 

       if(res) { 
       alert('You already have entered the giveaway'); 
       } else if (res == false) { 

       app.store(); 

       } 
     }); 
}, 

store() { 
       this.step_two = false; 
       this.active_two = false; 

       this.active_three = true; 
       this.step_three = true; 

       let app = this; 

       firebase.database().ref('/aanmeldingen/').push({ 
       username: app.name, 
       email: app.emailadress, 
       }); 
} 

スクリーンショットは、あなたが代わりにon()once()を使用する必要があります

enter image description here

答えて

2

(ないデータベースに、ジェーンを入力します)。 on()はリスナーを接続したままにします。したがって、store()にデータをプッシュすると、リスナーが再び発生します。

関連する問題