JavaScript设置公共变量

时间:2017-07-13 12:48:28

标签: javascript firebase react-native firebase-realtime-database

我有关于设置' public' JavaScript中的变量。这是我的代码:

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语句中。知道如何实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

您的函数接受回调,在回调之前调用console.log,这就是为什么undefined解决"解决问题的方法。它正在使用承诺。 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)