【发布时间】:2020-02-28 08:28:27
【问题描述】:
您将如何在 RxJS 中实现乐观更新?看这个例子:
const todoIdSource: Subject<string> = new Subject();
const $todo = todoIdSource.pipe(
tap(id => {
const optimisticTodo: any = {
userId: 1,
id: id, // Use some value from the source observable
title: "delectus aut autem",
completed: false
};
// TODO force emit optimisticTodo! How? :)
}),
concatMap((id) => ajax('https://jsonplaceholder.typicode.com/todos/' + id)),
map(response => response.response)
);
$todo.subscribe(value => console.log('TODO', value));
todoIdSource.next('1');
$todo 在 ajax 调用完成之前不会发出。
但我希望它在 todoIdSource 发出后立即发出乐观值。
最后 $todo 应该发出 2 个值:
- 乐观值
- ajax 结果的值
注意:
- 乐观值不应触发 ajax 调用。
- 乐观值应该能够使用来自可观察源
todoIdSource的数据。
在 RxJS 中是否有一种优雅的方式来实现这一点?我可以想象引入第二个 Observable optimisticTodo$,然后将其与 $todo 合并。但这并不优雅:)
【问题讨论】:
标签: javascript rxjs