无法使用Javascript中的Firebase方法.forEach更改全局变量

时间:2017-08-07 18:36:15

标签: javascript firebase firebase-realtime-database

我正在编写我的登录模块,以便当用户输入用户名和密码时,它将获得输入并在javascript中处理它。我使用.forEach函数,以便用户名和密码将查找其匹配的用户并将其唯一键存储在GLOBAL VARIABLE中,以便我以后可以使用它来为登录用户进行数据操作。

首先,我在函数外声明了变量currentKey。 var currentKey = "";

然后是登录功能,如下所示:

function logIn(){
	var loggedUname = $("#loginUname").val();
	var loggedPword = $("#loginPword").val();
	
	var tailorRef = firebase.database().ref('tailors');
	
	tailorRef.on('value', function(data){
		data.forEach(function(childData){
			if ( (loggedUname == childData.val().tUsername) && (loggedPword == childData.val().tPassword) ){
				currentKey = childData.key;
			}
		});
		alert(currentKey);
	});
	
}

如果我在输入注册的用户名和密码后按下登录按钮,它会通过警报显示相应的按键。

但是,当我将alert(currentKey);置于.on()方法之外时,如下所示:

tailorRef.on('value', function(data){
		data.forEach(function(childData){
			if ( (loggedUname == childData.val().tUsername) && (loggedPword == childData.val().tPassword) ){
				currentKey = childData.key;
			}
		});
	});
	alert(currentKey);

... currentKey显示为UNDEFINED!

我尝试在.forEach中创建一个set函数,但它仍然是相同的。我猜测唯一键没有正确存储在全局变量currentKey中。

任何人都知道我的代码中发生了什么?

编辑:很抱歉我之前没有说明我的主要问题。我想要的是将.forEach中的密钥存储在全局var currentKey中,这样当我在函数外部发出警报时,密钥仍将存在于var currentKey中。我的计划是在我的javascript中使用其他函数中存储的密钥,而不仅仅是在logIn()函数中。所以我认为声明函数外部的var会使它全局可用和可更新。如何使相应的密钥在我的javascript文件中全局可用?

0 个答案:

没有答案