JavaScript设置公共变量
我有一个关于在JavaScript中设置“public”变量的问题。这是我的密码: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
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你必须将库导入到你的项目中,如果是基于浏览器的项目,你将在窗口中找到它;如果是它的节点项目,你必须需要它。我使用此站点的语法解决了这个问题: