如何使用 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);
})
);
}
我有这个功能可以将文档添加到 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);
})
);
}