gpt4 book ai didi

javascript - Rx combineLatest 等待两个 observable 发出

转载 作者:行者123 更新时间:2023-11-29 23:28:29 25 4
gpt4 key购买 nike

假设我有一家存储 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com