我使用的是@ angular / fire,我只有数据库的snapshotChanges(),现在我尝试订阅它以保持始终更新。
return this.db.list<Plan>(this.BASE_PATH).snapshotChanges().subscribe(
item => {
return item.map(a => {
var p = new Plan;
p.key = a.payload.key;
p.name = a.payload.child(this.NAME).val();
p.descripton = a.payload.child(this.DESCRIPTON).val();
p.isPublic = a.payload.child(this.ISPUBLIC).val() == 'false' ? false : true;
return p;
})
}
);
但这会导致async
管道出现问题,并给我一个错误:
ERROR Error: InvalidPipeArgument: '[object Object]' for pipe 'AsyncPipe'
at invalidPipeArgumentError (common.js:3981)
at
错误实际上更长,但只是为了告诉您。
也许您有任何想法
答案 0 :(得分:1)
您是否在模板中使用了asyncpipe?如果是这样,则无需在ts类上订阅snapshotChanges()。 asyncPipe可以做到这一点
答案 1 :(得分:1)
您应该使用subscribe
方法和.pipe
运算符代替map
。如前所述,您不能在订阅上使用async
模板管道:
return this.db.list<Plan>(this.BASE_PATH).snapshotChanges().pipe(
map((items) => items.map(a => {
const p = new Plan;
p.key = a.payload.key;
p.name = a.payload.child(this.NAME).val();
p.descripton = a.payload.child(this.DESCRIPTON).val();
p.isPublic = a.payload.child(this.ISPUBLIC).val() == 'false' ? false : true;
return p;
}))
);