我有关于设置' 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语句中。知道如何实现这个目标吗?
答案 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)