2017-02-06 6 views
0

Я хочу, чтобы увеличить запись в firebase с помощью AngularFire2, ниже мой метод: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}); 
      } 
      });   
    }); 

Но вместо incrimenting Количество От только один раз, это дает бесконечный цикл и «количество» запись становится слишком большой,

любая помощь ребята?

Спасибо большое,

ответ

3

Проблема заключается в том, что вы подписаны на каждом изменении значения, и что является причиной, почему вы получаете в бесконечном цикле. Попробуйте добавить 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); 

В этом случае оно должно принимать значение только один раз.

+0

спасибо за ваш ответ, но он возвращает ошибку: свойство 'take' не существует в типе 'Subscription' – da45

+0

Попробуйте импортировать> import 'rxjs/add/operator/take' –

+0

Привет, Игорь, теперь это работает с двумя небольшие изменения, в первую очередь используйте .take (1) или .first() (то же значение) в этом файле.af.database.list ('/ products /' + productKey, {preserveSnapshot: true}). take (1) (или .first) не в конце. второе изменение перед использованием вышеуказанного кода, мы должны обновить angularFire2 с помощью npm i angularfire2 @ next --save. спасибо за вашу помощь, я приму ваш ответ. – da45

Смежные вопросы