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