- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一家存储 ID 和实体的商店,当它们发生变化时我需要将它们组合起来。
const state = {
ids: [],
entities: {}
}
const store = new BehaviorSubject(state);
Observable.combineLatest(
store.map(state => state.ids).distinctUntilChanged(),
store.map(state => state.entities).distinctUntilChanged(),
(ids, entities) => {
return ids.map(id => entities[id])
}
).subscribe(console.log);
store.next({ids: [1], entities: {1: {id: 1}}})
上面代码的问题在于,选择器函数将被调用两次,因为实体和 ID 都发生了变化。
有没有算子可以解决这个问题?如果没有,我怎样才能创建一个解决这个问题的方法?
我想到了一个特殊的测试。等待一定时间并将它们的 next() 合并为一个。
注意:它应该支持添加、更新和删除。
zip 运算符将解决、添加和删除问题,因为在这种情况下,我会同时更新 ID 和实体,但更新实体将不起作用。
最佳答案
withLatestFrom运算符(operator)应该完成这项工作。
store.map(state => state.entities).distinctUntilChanged().withLatestFrom(
store.map(state => state.ids).distinctUntilChanged(), (entities, ids) => ids.map(id => entities[id])
).subscribe(console.log);
// Add
store.next({
ids: [1],
entities: {
1: {
id: 1,
name: 'A'
}
}
});
// Update
store.next({
...store.getValue(),
entities: {
1: {
name: 'B'
}
}
});
// Delete
store.next({
ids: store.getValue().ids.filter(id => id !== 1),
entities: {}
});
关于javascript - Rx combineLatest 等待两个 observable 发出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48181873/
使用运行 rxjs 迁移工具后 rxjs-5-to-6-migrate -p src/tsconfig.app.json 我现在收到一个 linting 错误: combineLatest is de
我遇到了 rxjs 和 combineLatest 方法的问题。我试图在 combineLatest 中调用 combineLatest 并且它不起作用,尽管它返回 Observable 对象。请帮助
如何通过combineLatest组合Observables。 mergeLatest 未定义 我正在使用 Angular js 7。我想 Marge 拖曳查询字符串参数,但是当我编写 obserab
我有 3 个事件需要合并,当其中一个被触发时,调用服务。我使用了 combineLatest,但只有当第一个事件被 filterChanged 触发时它才有效。 filterChanged 是一个本地
我很难理解为什么 combineLatest没有返回最新值。这个例子有点做作,但至少它说明了我的问题。注意 color 的值来自 combineLatest observable 返回先前的值,当 s
我有一个带有频繁值的流和一个带有较慢值的流。我想将它们组合起来,但只在较慢的一个发出时才发出一个值。所以combineLatest不起作用。 像这样: a1 a2 b1 (a2,b1) a3 a4 a
我有一些观察结果。我需要知道哪个触发了订阅。 Observable.combineLatest( this.tournamentsService.getUpcoming(),
我对以下重载感兴趣: public static IObservable> CombineLatest(this params IObservable[] sources); public stati
我想知道我的应用程序何时离线并恢复在线。我在 rxjs 中注册了以下事件: const online = Rx.Observable.fromEvent(window, 'online'); cons
如果我有两个 SignalProducers(实际上它们是 API 服务请求,所以它们只发送一次“下一个”),并将它们与 combineLatest 组合(因为我想在两者完成后关闭加载微调器),如果其
我有一个从后端获取数据的 Angular 解析器。我有以下调用要执行: GetProject(projectId): Observable GetSites(projectId): Observabl
我正在用 FLUTTER/DART 和 RXDART 做一个小项目。 部分代码如下: class RegisterBloc with UserValidator { final _username =
我正在尝试关注 this example 但在使用 combineLatest() 时遇到问题: Property 'subscribe' does not exist on type 'Operat
我需要将来自两个来源的数据合并为一个 res: {data1: any, data2: any}对象,我需要实现这个 即使其中一个源不发出任何值 这是我期望的结构: xxx ( source1
我有一个主页页面,用户在其中点击联系我即可重定向到联系页面: home.component.html Contact me home.component.ts: import { Compon
我想执行一些顺序代码,但我无法从 combineLatest 中提取数据 const { datosPersona, participante } = await combineLatest( t
我有两个 observable 想与 combineLatest 结合起来: const o1 = from(['a', 'b', 'c']); const o2 = of('content from
我需要在这个 combineLatest 中处理每个函数的错误场景。我会在下面添加代码 const combined = combineLatest( this.myservice1.fn1(pa
我有 3 个可观察的事件流 - 按日期顺序 -(主要事件、有关销售的事件和有关客户的事件) - 每个流都包含一种与各种车辆相关的事件,每个事件都有一个 vehicleID 和各种其他事件特性。事件可以
我需要一种方法将值从一个 observable 传递给两个函数,每个函数都接受一个值,每个函数依次返回一个 observable(只发出一个值,然后完成)。我希望 .combineLatest() 允
我是一名优秀的程序员,十分优秀!