我正在尝试通过Ionic打字稿文件将Firebase数据库值推入新数组。
问题是,我不断收到错误消息:
错误:未捕获(承诺):TypeError:无法读取未定义的属性'empList'
我真的不明白为什么,因为我还在学习打字稿,却不知道该怎么办。
firebase JSON如下所示:
pat = re.compile(r'[^\w\d\s,]+')
s = "we are \xaf\x06OK\x03family, good"
print(' '.join(map(lambda x: x.strip(), pat.split(s))))
#=> we are OK family, good
- users
- hJfEgXkyaKPckchL3kx8rpZ58Ew2
-LV6c8E5rRD4_mQqsb6Q
- name: "Emily Blunt"
- points: 20
- grade: 12
任何帮助将不胜感激。
答案 0 :(得分:3)
问题的原因是this
回调函数中firebase
对象的作用域错误。它实际上是指Firebase.Promise。您需要保存对引用您的类的this
的引用,然后在firebase
回调中使用它:
export class Tab1Page {
name: string;
grade: number;
points: number;
empList: Array<{name: string, grade: number, points: number}> = [];
constructor() {
const usersRef = firebase.database().ref('/users/');
const ref = usersRef.orderByChild('points');
const self = this;
ref.once('value').then(function(snap) {
snap.forEach(function (childSnap) {
const pkey = childSnap.key;
// returns 'hJfEgXkyaKPckchL3kx8rpZ58Ew2'
const keyRef = firebase.database().ref('/users/' + pkey);
const ref2 = keyRef.orderByChild('name');
ref2.once('value').then(function(snap) {
snap.forEach(function (childSnap) {
const key = childSnap.key;
//returns -LV6c8E5rRD4_mQqsb6Q
const firebaseRef = firebase.database().ref('/users/' + pkey + '/' + key);
firebaseRef.once('value').then(function(snapshot) {
const name = snapshot.val().name;
const grade = snapshot.val().grade;
const points = snapshot.val().points;
// returns 'Emily Blunt', 12, 20
self.empList.push({
name: name,
grade: grade,
points: points
});
});
});
});
});
});
}
}
您可以看到另一个SO答案,以获取有关this
绑定的更多详细信息:How does the this keword work