[英]Reference error, says variable is not defined
因此,我有一个从Firebase数据库读取然后创建对象数组的函数。 我已经定义了变量key
,但是它仍然不可用。
var usersList = [];
const ref = firebase.database().ref()
function fetchUsers() {
ref.child('users').once('value').then(snap => {
var promises = [];
snap.forEach(childSnap => {
var 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)
})
}
这是我得到的错误...
(node:11724) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: key is not defined
如果我只是这样做: key = childSnap.key
,那么每个对象的uid
都是相同的。
key
仅在forEach
回调中定义。 当然,你不能再从第二个中引用它then
回调。 此外,它将是哪把key
? 对于第一个条目? 第二? 第三?
相反,您需要返回带有值的键:
function fetchUsers() {
ref.child('users').once('value').then(snap => {
var promises = [];
snap.forEach(childSnap => {
var key = childSnap.key;
promises.push(
ref.child(`users/${key}/points`).once('value').then(
snapper => ({key, snapper}) // **
)
);
});
return Promise.all(promises);
}).then(function(snapshots) {
return snapshots.map(({key, snapper}) => { // **
var points = snapper.val();
return {uid: key, points: points};
});
}).then(function(usersList) {
console.log(usersList);
});
}
在上面的第一行**
,我们once
转换了结果,因此它返回一个既包含键又包含“快照程序”的对象。
在第二行**
,我们使用结构化参数接收那些对象作为不同的key
和snapper
参数。
FWIW,如果您要积极使用简洁箭头:
function fetchUsers() {
ref.child('users').once('value').then(snap =>
Promise.all(snap.map(childSnap => {
const key = childSnap.key;
return ref.child(`users/${key}/points`)
.once('value')
.then(snapper => ({key, snapper}));
}))
).then(snapshots =>
snapshots.map(({key, snapper}) => ({uid: key, points: snapper.val()}))
).then(usersList => {
console.log(usersList);
});
}
还要注意使用map
而不是声明数组并从forEach
回调中将其推入。 :-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.