考虑一个需要过滤数组的简单情况。在angular和rxjs的上下文中,我们可以同时使用JS filter
方法和RxJS filter
运算符。
//JS filter
let array = ['1', '2', '3', '4']
let result = array.filter(x => x == '2')[0];
//RXJS filter
const p = from(array);
let result: any;
p.pipe(filter(x => x == '2')).subscribe(x => { result = x; });
是否存在一种方法优先于另一种方法的情况?如果可能的话,我是否应该主要尝试处理rxjs的可观察对象,尤其是在有角度的内部工作(如树摇动等)的情况下
答案 0 :(得分:-1)
像往常一样,取决于您要达到的目标。
对于一个非常简单的案例(仅在特定位置需要一个特定的组件),我认为这对性能没有太大的影响。
如果处理作文,则可观察性很好。
假设您有一个服务巫婆通过API获取一些数据(我们称其为“ DogsAPI”)
DogsAPIService:
getAllDogs():可观察<> ->获取所有狗
getAllDogs(() => {
http.get("/dogs/all");
})
getAllDogsWithColor(color:String)->订阅getAllDogs,然后使用颜色过滤列表
getAllDogsWithColor(color: String) = getAllDogs()
.pipe(
map(dog => dog),
filter(dog => dog.color == color)
)
getAllDogsWithColorAndFirstName(color:String,firstName:String)->订阅 getAllDogsWithColor()并按名字过滤
getAllDogsWithColorAndFirstName(color: String, firstName:String) = getAllDogsWithColor(color)
.pipe(
filter(dog => dog.firstName == firstName)
)
另一端的组件可以订阅它们,并在需要时对流进行其他各种操作。
通常情况下,订阅是通过异步管道进行的(智能组件通过“ 您的可观察|异步”管道通过了可观察项,因此订阅在使用该属性之前就在那进行了。