如何在循环外访问快照值?

时间:2018-03-17 07:50:32

标签: javascript jquery firebase firebase-realtime-database

我正在使用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  
});

4 个答案:

答案 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);

之类的操作