this.service.retrieveObject(id).map((object)=>{ return transformation1(object); })
.map((object)=>{ return transformation2(object); });
在下面的示例中,第map
次调用在transformation1
执行后无法访问对象。
我需要使用哪个运算符进行嵌套转换(transform2 over transformation1)?
答案 0 :(得分:1)
map
是进行转换的正确运算符。 map
基本上是a -> b
函数,您输入a
并输出b
。对map
的任何后续调用都将获得输出对象。
调用map
两次的缺点是你有效地迭代了对象两次。虽然在小物件上可能不是什么大问题,但是需要大量列表并且性能会降低。您可以将transformation1
和transformation2
函数有效地合并到一个函数中,并且只调用map
一次。或者让transformation2
从transformation1
获取返回对象。将两个操作组合成单个调用会更有效。
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); });