@ angular / fire и RxJS: возвращаемое значение из трубы / карты rxjs - PullRequest
1 голос
/ 13 марта 2019

Я хочу, чтобы эта функция возвращала значение id, но я не могу понять, где дать оператор возврата.

findCardId(card) {
  this.afs.collection('cards', ref=>ref.where('title', '==', `${card.title}`)).snapshotChanges().pipe(
   first(),
   map(actions => { actions.map(a => {
    const id = a.payload.doc.id;
   })})
  ).subscribe();
}

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Сначала вы должны вернуть id со своей карты, которой вы присвоили переменную id, а затем вам нужно вернуть результат этой функции как observable, чтобы вы могли подписаться в своем компоненте и получить возврат туда.

your.service.ts

findCardId(card) : Observable<any> {
      return this.afs.collection('cards', ref=>ref.where('title', '==', `${card.title}`)).snapshotChanges().pipe(
       first(),
       map(actions => { 
          return actions.map(a => {
            const id = a.payload.doc.id;
            return id;
       })})
      )
    }

your.component.ts

 constructor(private myService : MyService) { }
  getCardId() {
   this.myService.findCardId(card).subscribe( id => {
       console.log(id)// here is your id
   }     
}

Надеюсь, это поможет!

1 голос
/ 13 марта 2019

Прямо сейчас ваша внутренняя функция map (которая работает с массивом actions) ничего не возвращает.

Если вы пытаетесь вернуть массив со всеми ids из массива actions, вы можете просто сделать это следующим образом

...
map(actions => actions.map(a => a.payload.doc.id))
...
...