Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 即使使用if/else语句,Firebase也会进行多次调用_Javascript_Firebase_Firebase Realtime Database_Vue.js - Fatal编程技术网

Javascript 即使使用if/else语句,Firebase也会进行多次调用

Javascript 即使使用if/else语句,Firebase也会进行多次调用,javascript,firebase,firebase-realtime-database,vue.js,Javascript,Firebase,Firebase Realtime Database,Vue.js,我正在用Vue和Firebase构建一个应用程序。我是Firebase的新手,我对它有一些问题。我尝试在数据库中存储姓名和电子邮件。我想要的是首先检查电子邮件是否已经在数据库中,如果没有,运行另一个功能,将存储名称+电子邮件。如果电子邮件存储在数据库中,我希望输出警报并取消提交 因此,数据库中的电子邮件检查进行得非常顺利,它将输出警报,而且我能够检索数据。但问题在于,当我输入一封不在数据库中的电子邮件时。当我输入一封新的电子邮件(和名字)时,它会检查数据库并返回false,但随后会立即进行另一次

我正在用Vue和Firebase构建一个应用程序。我是Firebase的新手,我对它有一些问题。我尝试在数据库中存储姓名和电子邮件。我想要的是首先检查电子邮件是否已经在数据库中,如果没有,运行另一个功能,将存储名称+电子邮件。如果电子邮件存储在数据库中,我希望输出警报并取消提交

因此,数据库中的电子邮件检查进行得非常顺利,它将输出警报,而且我能够检索数据。但问题在于,当我输入一封不在数据库中的电子邮件时。当我输入一封新的电子邮件(和名字)时,它会检查数据库并返回false,但随后会立即进行另一次调用(我不知道为什么,我想这就是问题所在),同时它会返回true,并发出已经存在的警报。然后,它将继续执行另一个函数来存储数据,因为这是第一次调用的输出(错误)

我的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,
                });
}
控制台屏幕截图(输入Jane,不在数据库中)

您应该使用而不是
on()
使侦听器保持连接状态,因此当您将数据推入
store()
时,侦听器将再次启动