如何解决关于rxjs运算符
place = new BehaviourSubject<Place[]>([new Place(..),new Place(..)]);
假设我们创建了一个新地方
fun(){
this.place.pipe(tap(1)).subscribe(places => {
this.places.next(places.concat(newplace));
});
}
我的问题是-当我们使用这些tap(1)
时是什么意思,它将是数组中的对象还是整个列表?我们怎么知道它将需要一个列表或一个对象?
解决方法
我只是假设一些事情。
a:您要向BehaviourSubject发射一个对象并进行检索:
然后“ tap(...)”是管道的窥视操作。 Wich表示,如果您发射物体, 您可以在此处选择使用该对象创建副作用。 “ tap(1)”会产生错误,因为它需要一个函数。
如果要使用tap,它可能看起来像这样:
this.place.pipe(tap(value => console.log(JSON.stringify(value))).subscribe(value => {
// do something.
// but befor you do something,a value will be logged.
// since you are throwing an Array into the Subject,the whole array will be
// emitted as one object.
}
b:您希望发出多个项目,但您只想要第一个。
您要在管道中使用“ take(1)”操作。威奇(Wich)确保获得一件物品,而一件物品恰好一件,然后订阅将结束,因为结果是可观察到的 如果发出一项,则管道末端的末端将完成。
this.place.pipe(take(1)).subscribe(value => {
// do something
}
c:您要分别发出该值的每个项目。
在这里您可以将数组“转换”为一个Observable,该数组将分别发出每个值。
place: Observable<Place> = Observable.of([new Place(..),new Place(..)]);
fun(): void{
this.place.pipe(take(1)).subscribe(value => {
// will give you the first item and then completes
}
}
fun2():void{
this.place.pipe(tap(value => console.log(JSON.stringify(value))).subscribe(value => {
// this callback will be called for each single Value of the pipe.
// also the tap() will log,each single value.
}
}
注意: 一个BehaviourSubject将发出每个值,并存储最新值。 您可能应该尝试使用RxJ进行一些操作,以更好地了解它们的工作方式。 RxJs一开始有点烦人,因为学习曲线更像过山车。 但是,如果可以使用它,您应该理解它,因为有很多事情确实可以很好地使用它,但是如果您不了解“可观察到的流”和“反应性”的概念,则有些解决方法会浮动编程”,这将导致很多技术部门。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。