2017-02-06 6 views
0

私は以下、AngularFire2を使用してfirebaseにレコードをインクリメントしたいが、私の方法である:Firebase/Angular2:FirebaseのレコードをAngularFire2でインクリメントする方法は?

 const productsQuerry = this.af.database.list('/products/'+productKey,{ preserveSnapshot: true }); 
    const productUpdate = this.af.database.list('/products'); 
    productsQuerry.subscribe(snapshots => { 
      snapshots.forEach(snapshot => { 
      if (snapshot.key == "quantity") { 
       productUpdate.update(productKey,{quantity: snapshot.val()+1}); 
      } 
      });   
    }); 

しかし、その代わりの量だけで1時間をincrimenting、これは無限ループを生成し、「数量」のレコードが大きすぎるとなり、

助手席?

どうもありがとう、

答えて

3

問題は、あなたがすべての値の変化に加入していることであり、それはあなたが無限ループになっている理由です。 subscribeメソッドにtake(1)を追加してみてください。

const productsQuerry = this.af.database.list('/products/'+productKey,{ preserveSnapshot: true }); 
const productUpdate = this.af.database.list('/products'); 
productsQuerry.subscribe(snapshots => { 
     snapshots.forEach(snapshot => { 
     if (snapshot.key == "quantity") { 
      productUpdate.update(productKey,{quantity: snapshot.val()+1}); 
     } 
     });   
}).take(1); 

この場合、この値は1回だけ必要です。

+0

あなたの答えはありがたいですが、エラーを返します:プロパティ 'take'はタイプ 'Subscription'に存在しません – da45

+0

インポートしようとします>インポート 'rxjs/add/operator/take' –

+0

こんにちはイゴール、小さな変更は、まず、this.af.database.list( '/ products /' + productKey、{preserveSnapshot:true})の.take(1)または.first()(同じ意味)を使用します。または最初の)最後ではありません。上記のコードを使用する前に、2回目の変更はangularFire2をnpm iにアップグレードする必要があります。angularfire2 @ next --save。助けてくれてありがとう、私はあなたの答えを受け入れるだろう。 – da45

関連する問題