JavaScript设置公共变量

JavaScript设置公共变量,javascript,firebase,react-native,firebase-realtime-database,Javascript,Firebase,React Native,Firebase Realtime Database,我有一个关于在JavaScript中设置“public”变量的问题。这是我的密码: var storeKey; firebase.database().ref('stores').orderByChild('storeAddress').equalTo('Blk 167').once('value', function(snapshot) { var storeData = snapshot.val(); if (storeData){ conso

我有一个关于在JavaScript中设置“public”变量的问题。这是我的密码:

var storeKey;
    firebase.database().ref('stores').orderByChild('storeAddress').equalTo('Blk 167').once('value', function(snapshot) {
      var storeData = snapshot.val();
      if (storeData){
        console.log('exists');
      }else{
        storeKey = firebase.database().ref('stores').push({
          storeName : "store1",
          storeAddress : "Blk 167"
        }).getKey();

        //console.log("STORE " + storeKey);
      }
    });

    console.log("STORE " + storeKey);
在将新记录添加到Firebase之前,我正在检查地址是否存在。但是,如果我将console.log放在最后一行,就会得到未定义的。只有在else语句中打印出来时,它才会返回一个值


我希望在需要其他位置的数据之前将storeKey分离出来,并且我不希望我的代码嵌套在else语句中。知道如何实现这一点吗?

您的函数接受回调,在回调之前调用
控制台.log
,这就是为什么它的
未定义的
一种“解决”方法是使用承诺。e、 g

const deferred = q.defer();
    firebase.database().ref('stores').orderByChild('storeAddress').equalTo('Blk 167').once('value', function(snapshot) {
          var storeData = snapshot.val();
          if (storeData){
            console.log('exists');
          }else{
            storeKey = firebase.database().ref('stores').push({
              storeName : "store1",
              storeAddress : "Blk 167"
            }).getKey();

            deferred.resolve(storeKey);
          }
        });

        deferred.then(console.log)

嘿,对不起,前一阵子还没好。但是当我第二次运行时,我得到了一条错误消息“Promise构造函数的参数不是函数”@EmmaHannah您可以使用
q
库。示例已更新。e、 但它告诉我找不到变量Q。我如何定义Q?因为我没有在链接中看到它also@EmmaHannah你必须将库导入到你的项目中,如果是基于浏览器的项目,你将在
窗口中找到它;如果是它的节点项目,你必须
需要它。我使用此站点的语法解决了这个问题: