我试图通过从firebase数据库中获取项目并将它们推送到列表来填充列表。经过大量的搜索,我在我的代码中达到了这一点:
this.angFire.database.list('/SpareParts', {
query: {
orderByChild: '',
limitToFirst: this.limit // this is a BehaviorSubject<number>(3)
}
}).subscribe(items => items.forEach(item => function f(j) {
setTimeout(() => {
console.log('timeout');
this.items.push(item);
if (--j) f(j);
}, 3000)
}.bind(this)(3) ));
在这里,我只从firebase获取3件物品。代码确实在某种程度上起作用。它通过 setTimeout ,在列表中同时推送三个项目,在完成后,它会因错误而崩溃:
_这是未定义的
在此之前,我收到了错误
这是未定义的
所以我使用的.bind函数仍然没有用。
对此有任何建议将不胜感激。谢谢。
答案 0 :(得分:1)
将其存储为函数之外的变量,并使用该引用来引用您的组件。
var self = this; // <-- store here
this.angFire.database.list('/SpareParts', {
query: {
orderByChild: '',
limitToFirst: this.limit // this is a BehaviorSubject<number>(3)
}
}).subscribe(items => items.forEach(item => function f(j) {
setTimeout(() => {
console.log('timeout');
self.items.push(item); // <-- use here
if (--j) f(j);
}, 3000)
}.bind(this)(3) ));