如何使用带有promise的observable并返回可观察的

时间:2018-06-11 18:37:51

标签: angular rxjs angularfire2

我有这个功能将文档添加到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;
      })
    );
  }

此函数应该像现在一样返回listingId的可观察量。

但是,我不确定是否应该在listingId中退回...set(listing).then(),因为当列表不会是"设置"或者发生任何错误我不会返回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);
      })
    );
  }

问题是说实话,我不确定如何使用可观察的承诺。

第一种方法返回字符串的Observable

秒方法返回Observable of void

1 个答案:

答案 0 :(得分:0)

您实际上可以返回Promise并使用mergeMap将其合并到Observable流中:

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);
      })
    );
  }
相关问题