如何使用 observable with promise 和 return observable

How to use observable with promise and return observable

我有这个功能可以将文档添加到 firestore 集合。

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;
      })
    );
  }

这个函数应该像现在一样return listingId 的可观察对象。

但是我不确定我是否应该 return ...set(listing).then() 中的 listingId 因为当列表不是 "set" 或发生任何错误时我会不是 return listingId 而是其他东西。

我已经试过检查进展情况了:

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);
      })
    );
  }

老实说,我不确定如何使用 promise with observable。

第一种方法returns Observable of string

秒接近returns Observable of void

你实际上可以 return 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);
      })
    );
  }