错误错误:未捕获(承诺):TypeError:无法读取未定义的属性“键”

时间:2020-02-02 09:38:38

标签: angular typescript firebase firebase-realtime-database

我是Angular的初学者。我正在观看Mosh Hamedani的教程,该教程的版本为4,但是我使用的是更高版本。我正在AddToCart按钮上的电子商务项目中,该产品应通过单击按钮来增加其数量,并使用productId在Firebase中更新,并且如果我尝试添加新产品,则该新产品的ID应该添加到AngularFire数据库中

现在一切正常,在shopping-cart.service.ts文件中出现错误。尝试将产品添加到购物车时,我在控制台中收到此错误。错误错误:未捕获(承诺):TypeError:无法读取未定义的属性“ key”。 我的错误是在product.key中 这是代码。

product.ts

setview

shopping-cart.service.ts

import { Injectable } from '@angular/core';
import { AngularFireDatabase } from '@angular/fire/database';
import { map } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class ProductService {

  constructor(private db : AngularFireDatabase) { }

  create(product){
    return this.db.list('/products').push(product);
  }
  getAll(){
    return this.db.list('/products').snapshotChanges().pipe(
      map((products:any[])=>products.map(prod=>{
        const payload = prod.payload.val();
        const key = prod.key;
        return <any>{key,...payload};
      }))
    )
  }
  get(productId){
    return this.db.object('/products'+productId).valueChanges();
  }
  delete(productId){
    return this.db.object('/products'+productId).remove();
  }
}

product.ts

async addToCart(product:Product){
    let cartId = await this.getOrCreateCartId();
    let item$:Observable<any> = this.db.object('/shopping-cart/' + cartId + '/items/' + product.key).valueChanges();
    let item$$ = this.db.object('/shopping-carts/' + cartId + '/items/' + product.key);
    item$.pipe(take(1)).subscribe(item=>{
      if(item===null){
        item$$.set({product:product,quantity:1});
        console.log("Adding new product to cart");
      }else{
        item$$.update({quantity:item.quantity+1});
        console.log("Updating the quantity")
      }
    });
  }

1 个答案:

答案 0 :(得分:0)

您的item $很可能在您执行item $ .pipe(take(1))时未初始化