Zer*_*lve 2 javascript observable rxjs angular
我必须在RXJS Observable中转换对象属性。使用“地图”运算符可以工作。当我两次订阅同一个可观察对象时,将发生问题:属性被两次转换
我尝试使用“共享”运算符和多种变体,但似乎无济于事
const source = of(
{ id: 1, name: 'John' },
);
const personObservable = source.pipe(
map(person => {
person.name = person.name + '_test'; return person;
}),
);
personObservable.subscribe(
person => console.log('first: ', person)
);
personObservable.subscribe(
person => console.log('second: ', person)
);
Run Code Online (Sandbox Code Playgroud)
first: John_test
second: John_test
Run Code Online (Sandbox Code Playgroud)
first: John_test
second: John_test_test
Run Code Online (Sandbox Code Playgroud)
这是因为您要两次修改同一对象实例。当地图返回该对象的副本时,将不会发生。尝试这个:
const personObservable = source.pipe(
map(person => ({
...person,
name: person.name + '_test'
})),
);
Run Code Online (Sandbox Code Playgroud)
您还可以将shareReplayoperator与原始映射功能一起使用:
const personObservable = source.pipe(
map(person => {
person.name = person.name + '_test'; return person;
}),
shareReplay()
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |