Как использовать наблюдаемое с обещанием и возвращение наблюдаемого - PullRequest
0 голосов
/ 11 июня 2018

У меня есть эта функция для добавления документа в коллекцию пожарных.

addListing(listing: Listing) {
    return this.auth.user$.pipe(
      first(),
      map(user => user.uid),
      map(uid => {
        const listingId = this.afs.createId();

        this.listingsCollection.doc(listingId).set(listing);

        return listingId;
      })
    );
  }

Эта функция должна возвращать наблюдаемую величину listingId, как это происходит сейчас.

Однако я 'Я не уверен, должен ли я возвращать listingId в ...set(listing).then(), потому что, когда список не будет «установлен» или возникнет какая-либо ошибка, я не верну listingId, но что-то еще.

I 'мы уже пытались проверить, как это происходит:

addListing3(listing: Listing) {
    return this.auth.user$.pipe(
      first(),
      map(user => user.uid),
      map(uid => {
        const listingId = this.afs.createId();

        this.listingsCollection
          .doc(listingId)
          .set(listing)
          .then(() => {
            return listingId;
          })
          .catch(error => console.error);
      })
    );
  }

Проблема в том, чтобы быть честным, я не уверен, как использовать обещание с наблюдаемым.

Первый подход возвращает наблюдаемое из строки

Секундный подход возвращает Observable of void

1 Ответ

0 голосов
/ 11 июня 2018

На самом деле вы можете вернуть Promise и объединить его с потоком Observable с помощью mergeMap:

addListing3(listing: Listing): Observable<string> {
    return this.auth.user$.pipe(
      first(),
      map(user => user.uid),
      mergeMap(uid => {
        const listingId = this.afs.createId();

        return this.listingsCollection
          .doc(listingId)
          .set(listing)
          .then(() => {
            return listingId;
          })
          .catch(error => console.error);
      })
    );
  }
...