我正在使用Firebase和JavaScript,我想将user.fcmkey
分配给外部变量键。
以下是我的代码,但没有访问键值并打印NA
。如何在快照块之外访问快照值。
var key="NA";
firebase.database().ref('users').child("1234567896").once('value', function(snap) {
const user = snap.val()
const userKey = snap.key;
const myKey=user.fcmkey;
key = myKey
});
答案 0 :(得分:0)
你可以这样做:
function retData(){
firebase.database().ref('users').child("1234567896").once('value', function(snap) {
const user = snap.val()
const userKey = snap.key;
const myKey=user.fcmkey;
key=myKey
callMe();
});
function callMe(){
console.log(key);
};
在检索所有数据后将调用函数callMe()
,console.log(key);
将为您提供检索值。
答案 1 :(得分:0)
Promise可用于解析当前查询范围之外的值。
let getKey = function(){
return new Promise((resolve, reject) => {
firebase.database().ref('users').child("1234567896").once('value', function(snap) {
const user = snap.val()
const userKey = snap.key;
const myKey=user.fcmkey;
resolve(myKey)
});
});
};
getKey.then(myKey => {
console.log(myKey)
// do something withkey
})
有关承诺的更多信息请查看Promise
答案 2 :(得分:0)
只需将整个snap
传递给函数?顺便说一句:.once
已经是一个承诺,所以你可以.then
。
var myKey;
firebase.database().ref('users').child("1234567896").once('value', function(snap) {
if(snap){
doMyThing(snap);
}
});
function doMyThing(snap){
myKey = snap.val().whateverKeyIsInDB;
}
答案 3 :(得分:0)
这是如何访问和保存状态如下...
const saveState = {
key: false,
anyKey: 'anyDatas'
};
OR
const saveState = {};
然后您可以将保存保存在对象中
firebase.database().ref('users').child("1234567896").once('value', function(snap) {
const user = snap.val()
const userKey = snap.key;
const myKey=user.fcmkey;
saveState.key = myKey;
});
要访问该状态,请执行alert(saveState.key);