我看到了许多有关angualr的示例,但是有些时候使用pip和map以及某些时候使用subscription引起了困惑。
我有两个问题:
A:什么是不同的beetwen点子和订阅?
B:当我使用订阅以及当我使用pip和map时。
答案 0 :(得分:0)
当我们在程序中使用数据收集时,仅拥有数据本身很少。我们可能应该对其进行处理,过滤或从中获取派生数据。
为此,RxJS为我们提供了可管道运算符,这些运算符使我们能够转换可观察对象发出的数据。这些运算符作为参数传递给pipe方法,如下所示:
// RxJS v6+
import { from } from 'rxjs';
import { map } from 'rxjs/operators';
//emit (1,2,3,4,5)
const source = from([1, 2, 3, 4, 5]);
//add 10 to each value
const example = source.pipe(map(val => val + 10));
//output: 11,12,13,14,15
const subscribe = example.subscribe(val => console.log(val));
可管道运算符包括:
地图,过滤器,第一,合并,flatMap等
一旦数据已被修改,过滤等,您必须预订可观察对象,以便进行http调用或获取可观察数据。
您可以获取更多信息here
答案 1 :(得分:0)
A:pipe
可以将其他rxjs功能应用于结果。订阅会触发Observable并接受一个函数,并将可能修改后的结果作为参数。
B:如果API或其他为您提供Observable的对象以您可以直接处理的方式返回它,则只需使用订阅。如果您想在使用它之前修改返回的内容,请使用管道和地图。 IE:
this.api.search(this.criteria)
.pipe(map((response: { content: any[], totalElements: number }) => response.content))
.subscribe(data => this.data = data);
诚然,这是一个简化的示例,映射工作可以很容易地在subscription块中完成。当在html中使用async pipe而不是在ts文件中进行订阅时,它变得更加有用。