我试图使用密钥从firebase检索单个对象 . 我没有为.subscribe()方法实现OnDestroy,而是想使用take()属性来获取单个对象,并完成它 .
问题是我得到一个错误“类型为void的属性不存在”,控制台中的错误是“Undefined is not object” . 我已经搜索过,似乎无法找到解决方案 .
constructor(
private router: Router,
private route: ActivatedRoute,
private categoryService: CategoryService,
private productService: ProductService) {
this.categories$ = categoryService.getCategories();
const id = this.route.snapshot.paramMap.get('id');
if (id) {
this.productService.get(id).take(1).subscribe(p => this.product = p);
}
}
我导入了rxjs / add / operator / take .
编辑:下面是我的ProductService类
export class ProductService {
constructor(private db: AngularFireDatabase) { }
create(product) {
return this.db.list('/products').push(product);
}
getAll() {
return this.db.list('/products').snapshotChanges();
}
get(productId) {
return this.db.object('/products/' + productId);
}
}
这是我在控制台中遇到的错误:
错误:未捕获(在承诺中):TypeError:this.productService.get(id).take不是函数 . (在'this.productService.get(id).take(1)'中,'this.productService.get(id).take'未定义)
1 回答
看起来你试图在某些不是Observable的情况下调用
take
.我的猜测
this.productService.get(id)
的类型为AngularFireObject<T>):您需要使用
valueChanges
(或snapshotChanges
)来获取Observable:this.productService.get(id).valueChanges().take(1).subscribe(p => this.product = p);
另见:Retrieving data as objects