可观察物是首选吗?

时间:2018-08-27 17:02:35

标签: angular rxjs

考虑一个需要过滤数组的简单情况。在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的可观察对象,尤其是在有角度的内部工作(如树摇动等)的情况下

1 个答案:

答案 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)
    )

另一端的组件可以订阅它们,并在需要时对流进行其他各种操作。

通常情况下,订阅是通过异步管道进行的(智能组件通过“ 您的可观察|异步”管道通过了可观察项,因此订阅在使用该属性之前就在那进行了。