Javascript 如何检索函数中变量的内容?
我创建了这个函数:Javascript 如何检索函数中变量的内容?,javascript,reactjs,firebase,react-native,firebase-realtime-database,Javascript,Reactjs,Firebase,React Native,Firebase Realtime Database,我创建了这个函数: var IDOfUserToKill = 'tralala'; export function getIDOfUserToKill(userID, gameID) { let path = '/games/' + gameID + '/users/' + userID; fb.database().ref(path).on('value', snapshot => { IDOfUserToKill = ''; if (snapsho
var IDOfUserToKill = 'tralala';
export function getIDOfUserToKill(userID, gameID) {
let path = '/games/' + gameID + '/users/' + userID;
fb.database().ref(path).on('value', snapshot => {
IDOfUserToKill = '';
if (snapshot.val()) {
IDOfUserToKill = snapshot.val().userToKill;
console.log(IDOfUserToKill); // return the good ID
}
});
}
userID = IDOfUserToKill; // return "tralala" and not the good ID
fb.database().ref(path).on('value', snapshot => {
IDOfUserToKill = '';
if (snapshot.val()) {
IDOfUserToKill = snapshot.val().userToKill;
console.log(IDOfUserToKill); // return the good ID
}
});
然后我想在这个变量之外使用变量IDOfUserToKill
。因为如果我使用IDOfUserToKill
,它将返回在函数(tralala)之前定义的值,而不是ID
如何检索变量的内容?(我使用React Native)。此函数:
var IDOfUserToKill = 'tralala';
export function getIDOfUserToKill(userID, gameID) {
let path = '/games/' + gameID + '/users/' + userID;
fb.database().ref(path).on('value', snapshot => {
IDOfUserToKill = '';
if (snapshot.val()) {
IDOfUserToKill = snapshot.val().userToKill;
console.log(IDOfUserToKill); // return the good ID
}
});
}
userID = IDOfUserToKill; // return "tralala" and not the good ID
fb.database().ref(path).on('value', snapshot => {
IDOfUserToKill = '';
if (snapshot.val()) {
IDOfUserToKill = snapshot.val().userToKill;
console.log(IDOfUserToKill); // return the good ID
}
});
是异步的,这意味着它在完成之前会转移到另一个任务
这就是为什么在on()
内部可以获得数据库中的id
,而在外部,这里是userID=IDOfUserToKill
您将获得值'tralala'
要了解有关非同步的更多信息,请检查以下内容:
是
fb.database().ref(path).on('value',snapshot=>{}
异步?因为这可以解释为什么不记录正确的值。在函数完成执行之前,您可能正在将IDOfUserToKill
赋值给userID
。为什么希望导出函数(注意,您没有调用它)将更改IDOfUserToKill
的值吗?不,我只是导出了该函数,因为我正在另一个文件中使用它。那么如何恢复内容?您有任何示例吗?在这种情况下,它是否异步都无关紧要。OP定义了一个变量IDOfUserToKill
,然后导出一个函数(不调用它)然后将IDOfUserToKill
的值赋给另一个变量,这个变量的当前值当然是IDOfUserToKill
,这个变量是'tralala'
。@Jean这个答案对你有帮助吗?好的,我理解这个原理。那么我如何恢复内容呢?你有什么例子吗?@Jean在这里检查一下,和你有同样的问题e:如果你不明白,请告诉我。另外,请把这个答案改成正确的,这样人们就会知道它是有帮助的。我真的不明白,你能给我举一个函数的例子吗?