哪个rxjs运算符在映射后进行额外的转换?

时间:2018-01-16 14:25:51

标签: angular rxjs

 this.service.retrieveObject(id).map((object)=>{ return transformation1(object); })
                                .map((object)=>{ return transformation2(object); });

在下面的示例中,第map次调用在transformation1执行后无法访问对象。

我需要使用哪个运算符进行嵌套转换(transform2 over transformation1)?

2 个答案:

答案 0 :(得分:1)

map是进行转换的正确运算符。 map基本上是a -> b函数,您输入a并输出b。对map的任何后续调用都将获得输出对象。

调用map两次的缺点是你有效地迭代了对象两次。虽然在小物件上可能不是什么大问题,但是需要大量列表并且性能会降低。您可以将transformation1transformation2函数有效地合并到一个函数中,并且只调用map一次。或者让transformation2transformation1获取返回对象。将两个操作组合成单个调用会更有效。

this.service.retrieveObject(id)
    .map(object => transformation2(transformation1(object)));

更新1/17/2018

如果transformation1和transformation2是异步的,那么使用switchMap呢? switchMap从第一个observable获取结果并将其传递给第二个observable。

this.service.retrieveObject(id)
    .switchMap(retrieveObjectResponse => transformation1(retrieveObjectResponse))
    .switchMap(transformation1Response => transformation2(transformation1Response)); 

答案 1 :(得分:0)

试试这个!

this.service.retrieveObject(id).map((object)=>{ return transformation1(object); })
                               .flatMap((object)=>{ return transformation2(object); });