【发布时间】:2021-10-14 03:08:25
【问题描述】:
我有一个通过 id 获取书籍的代码
const fetchBook = (bookId: number) => {
const title = 'Book' + bookId;
// mimic http request
return timer(200).pipe(mapTo({ bookId, title }));
}
const bookId$ = new Subject<number>();
const book$ = bookId$.pipe(
switchMap(bookId => fetchBook(bookId)),
shareReplay(1)
);
book$.subscribe(book => console.log('book title: ', book.title))
bookId$.next(1);
我有一个 API 方法可以修补值并返回更新的对象:
const patchBook = (bookId: number, newTitle: string) => {
return timer(200).pipe(mapTo({ bookId, title: newTitle }));
}
我应该怎么做才能让book$ 在调用patchBook(1, 'New Book Title') 后发出新值?
我可以将book$ 明确声明为Subject 并手动更新它。但这将是必要的,而不是被动的方法。
更新:该补丁在任何时候(或从不)由于用户操作而被调用
Upd2:实际上book$也可以在服务器端更改,我的真实代码如下所示:
const book$ = combineLatest([bookId$, currentBookChangedServerSignal$]).pipe...
【问题讨论】:
标签: rxjs rxjs6 rxjs-observables