项目中入手
可观察对象 Observable 可以理解为流对象
将一个数据处理成流对象就可以在使用它支持的操作符进行处理。
订阅 Subscription 最后用 Subscription 来输出,终止掉Observable。
观察者 observer
var observer = {
next: x => console.log('Observer got a next value: ' + x),
error: err => console.error('Observer got an error: ' + err),
complete: () => console.log('Observer got a complete notification'),
};
observable.subscribe(observer);
观察者只是有三个回调函数的对象,每个回调函数对应一种 Observable 发送的通知类型。
const ob = Observable.interval(1000);
ob.take(3).map(n => n * 2).filter(n => n > 0).subscribe(n => console.log(n));
操作符 Operators 分类:创建、转换、过滤、组合、错误处理、工具,等等 创建 empty() 创建一个什么数据都不发出并且立马完成的 Observable。
of() 创建一个 Observable,它会依次发出由你提供的参数,最后发出完成通知。 转换操作符
from() 从一个数组、类数组对象、Promise、迭代器对象或者类 Observable 对象创建一个 Observable.几乎可以把任何东西都能转化为Observable.
concatMap 发出对源Observable发出的每个值使用投射函数(和可选的resultSelector)的结果并且顺序的取出每个投射过的内部Observable的值. 返回一个 Observable,该 Observable 发出基于对源 Observable 发出的值调用提供的函数, 该函数返回所谓的内部 Observable。 每个新的内部 Observable 和前一个内部 Observable 连接在一起。
工具处理 do() 为源 Observable 上的每次发送执行副作用,但返回的 Observable 与源 Observable 是相同的。 版本5.5后有个pipe() 操作符 将里边的操作符联系起来
const source$ = range(0, 10);
source$.pipe(
filter(x => x % 2 === 0),
map(x => x + x),
scan((acc, x) => acc + x, 0)
)
.subscribe(x => console.log(x))