是否可以向已订阅的可观察对象添加更多操作?我尝试了下面的代码,该代码不起作用,因为未执行订阅后再点击一次部分(代码为here)
import { of, timer } from 'rxjs';
import { tap, map, take } from 'rxjs/operators';
const source = timer(1000, 1000);
//transparently log values from source with 'do'
const example = source.pipe(
take(3),
tap(val => console.log(`BEFORE MAP: ${val}`)),
map(val => val + 10),
tap(val => console.log(`AFTER MAP: ${val}`))
);
//'do' does not transform values
//output: 11...12...13...14...15
const subscribe = example.subscribe(val => console.log(val));
example.pipe(
tap(val => console.log(`One more tap after subscribe: ${val}`))
);
例如,我想到的使用cas就是进行http呼叫的地方,并且需要根据呼叫的响应来更新多个服务。
答案 0 :(得分:0)
我不确定您要实现什么目标,但是pipe()
函数不会更改源Observable
。它只是输出一个新的Observable
,它是由旧的pipe()
和您在5;
中添加的运算符产生的。因此,您的最后一行代码就像编写
example = example.pipe(
tap(val => console.log(`One more tap after subscribe: ${val}`))
);
意味着您将值设置为语句。也许您可以在转换后将您的Observable分配给它自己(尽管我敢肯定,它看起来很难看,对其他人来说很难理解,因此应该避免)。
<Picker
selectedValue={this.state.role}
style={{height: 50, width: 300}}
onValueChange={(itemValue, itemIndex) =>
this.setState({role: itemValue})
}>
<Picker.Item label="Admin" value="ad" />
<Picker.Item label="Coordinator" value="cod" />
</Picker>
也许您应该更详细地说明您的特定用例,以便我们找到更清洁的解决方案。
答案 1 :(得分:0)
这将是您最终想要实现的目标
例如,我想到的使用cas就是进行http呼叫的地方,并且需要根据呼叫的响应来更新多个服务。
const onExampleCalled=new Subject();
// listen to example called
onExampleCalled.subscribe(console.log)
example.pipe(tap(result=>onExampleCalled.next(result)).subscribe()