使用管道和地图时以及使用订阅时可观察到的

时间:2019-12-30 19:21:14

标签: javascript angular typescript angular8

我看到了许多有关angualr的示例,但是有些时候使用pip和map以及某些时候使用subscription引起了困惑。

我有两个问题:

A:什么是不同的beetwen点子和订阅?

B:当我使用订阅以及当我使用pip和map时。

2 个答案:

答案 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文件中进行订阅时,它变得更加有用。