Javascript 首先完成从Firebase读取数据,然后执行其他操作
所以我的问题是返回空数组是因为从Firebase读取数据还没有完成。我正在使用then方法,但它仍然执行then中的所有内容Javascript 首先完成从Firebase读取数据,然后执行其他操作,javascript,arrays,firebase,firebase-realtime-database,Javascript,Arrays,Firebase,Firebase Realtime Database,所以我的问题是返回空数组是因为从Firebase读取数据还没有完成。我正在使用then方法,但它仍然执行then中的所有内容 var usersList = []; const ref = firebase.database().ref() ref.child('users').once('value').then(snap => { snap.forEach(childSnap => { const key = childSnap.key
var usersList = [];
const ref = firebase.database().ref()
ref.child('users').once('value').then(snap => {
snap.forEach(childSnap => {
const key = childSnap.key
ref.child(`users/${key}/points`).on('value', function(snapper) {
var points = snapper.val()
usersList.push({uid: key, points: points})
})
})
}).then(function() {
console.log(usersList)
})
使用then()
本身并不是一个神奇的解决方案。您需要从回调中返回一个承诺,而您的代码没有这样做。在这种情况下,您只希望在加载所有用户后调用最终的then()
,因此您需要返回一个承诺,该承诺只有在完成后才能解析
const ref = firebase.database().ref()
ref.child('users').once('value').then(snap => {
var promises = [];
snap.forEach(childSnap => {
const key = childSnap.key
promises.push(
ref.child(`users/${key}/points`).once('value')
);
});
return Promise.all(promises);
}).then(function(snapshots) {
return snapshots.map(snapper => {
var points = snapper.val()
return {uid: key, points: points};
})
}).then(function(usersList) {
console.log(usersList)
})
这行似乎无效:
返回承诺。全部(承诺)
您能解释一下它的无效之处吗?这是一个语法错误,此行前缺少“)”。不过,我在运行脚本后收到此错误消息:(节点:14560)UnhandledPromisejectionWarning:Unhandled Promisejection(拒绝id:1):ReferenceError:未定义键