Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 哪个rxjs操作符在映射后进行额外转换?_Angular_Rxjs - Fatal编程技术网

Angular 哪个rxjs操作符在映射后进行额外转换?

Angular 哪个rxjs操作符在映射后进行额外转换?,angular,rxjs,Angular,Rxjs,在下面的示例中,第二个map调用在transformation1示例之后无法访问对象 我需要使用哪个操作符进行嵌套转换(转换2超过转换1)?试试这个 this.service.retrieveObject(id).map((object)=>{ return transformation1(object); }) .map((object)=>{ return transformation2(object); });

在下面的示例中,第二个
map
调用在
transformation1
示例之后无法访问对象

我需要使用哪个操作符进行嵌套转换(转换2超过转换1)?

试试这个

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

map
是进行转换的正确操作符
map
本质上是一个
a->b
函数,您可以在其中输入
a
并输出
b
。对
map
的任何后续调用都将获得输出对象

两次调用
map
的缺点是,您实际上在对象上迭代了两次。而在小对象上,这可能不是什么大问题,但如果使用大列表,则性能会下降。您可以有效地将
transformation1
transformation2
函数组合成一个函数,并且只需调用
map
一次。或者使
transformation2
transformation1
获取返回对象。将两个操作合并到一个调用中会更有效

this.service.retrieveObject(id).map((object)=>{ return transformation1(object); })
                               .flatMap((object)=>{ return transformation2(object); });
2018年1月17日更新


如果transformation1和transformation2是异步的,那么使用
开关映射如何
switchMap
从第一个可观察对象获取结果,并将其传递给第二个可观察对象

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

第二个
map()
接收调用第一个
map()
的结果。或者您希望第二个
map()
与原始
对象一起工作?那么第一个
map()
用于什么?transformation1和/或transformation2是否返回可观察值?在我的情况下,这是不可能的,因为transformation1和transformation2是属于两个不同函数的两个函数services@user2080105如果它们是异步的,这就可以解释为什么它们以不同的顺序发射。默认映射行为是嵌套行为。确切地说,transformation1和transformation2是异步的,我找不到方法告诉transformation2等待transformation1如果transformation1和transformation2是异步的,那么使用switchMap呢?transformation1和transformation2是异步的,我找不到方法告诉transformation 2等待transformation 1-然后请发布
transformation1
的代码,它的返回值应该是可观察的或承诺,在这种情况下,将其包装在
mergeMap
中,而不是
map
this.service.retrieveObject(id)
    .switchMap(retrieveObjectResponse => transformation1(retrieveObjectResponse))
    .switchMap(transformation1Response => transformation2(transformation1Response));