RxJs相关学习

  1. rxjs 是什么?
  • rxjs is for handler event 's loadsh
  • 处理事件的lodash
  1. 如何理解rxjs
  • 结合observe pattern ,iterator pattern 和functional programming with collections ,用来满足以一种理想化的方式来管理事件序列所需的一切。
  • 记得数据是随着时间的流动而不断改变和流动的,同样的数据输入进来,就是同样的输出
  • 就像fp一样,纯的感觉,通过管道来使用数据,一种数据流动的感觉,在rxjs中也如此
  1. 拉取与推送
  • 分辨出谁是消费者还是生产者(调用方就是消费者,被调用的就是生产者) // 好久没有看了,记忆中的理解是这样的。等等在对对看。
  • 简单的例子:
    function see () { // see函数就是生产者
        return 1 }
    see() // 这个就是消费者
  • 不过在rxjs中很重要的一点就是没有消费就不会有生产,当进行消费的时候,才开始进行生产,同时这个也是延时计算。如同函数般,当真正地进行调用的时候,才会return结果
  1. 突然发现学习Rxjs就像学习Jq一样的,多用就学会了。
  • 多使用其中的operate symbol,也要理解Rxjs的适用范围:个人理解是大范围的异步场景下使用的,如聊天。也要理解其中的理念:观察者模式和iterate mode,stream mode。
  • 同时要明白其中几个概念:
    1. observable(可观察对象):一定意义上就是生产者,是多个值的堕性推送集合
      ``js
      import Rx from 'rxjs/Rx';
      const observable = Rx.observable.of(1,2,3)
- 2. observer(观察者):消费者,将生产者生产的数据进行消费,由observable发送值的消费者
```js
const observer = {
    next: val => console.log(val),
    error: err => console.log(err),
    complete:() => console.log('complete') }
    1. subject(中间人,主体):因为对于observable而言,他们都是相互独立的,但是在一些场景下面,我们需要第二个observable是基于第一个observable的来进行送出数据的,这个时候就要一个中转站来帮忙了。同时这个中转站相当于广播一样,可以让多个observer进行送值
const resource = Rx.observable.interval(100).take(4),
a,b =  {
    next: val => console.log(val),
    error: err => console.log(err),
    complete:() => console.log('complete') },
sub = Rx.Subject();
sub.subscribe(resource);
sub.subscribe(a);
    1. scheduler(调度者):对于observable而言,我们有时候很难确定其中的数据来源是sync或者是async,和怎么何时去发送数据,这个时候就需要scheduler来帮忙了。
const observable=Rx.observable.interval(100).take(4);
console.log('11')
observable.observerOn(Rx.Scheduler.async).subscribe(val=>console.log(val))
console.log('22')
// 11 22- 1-2-3-4
    1. subscription(订阅):在观察者对可观察对象进行订阅的过程,其也是个对象,表示可清理的资源对象,毕竟对于数据而言,当用户不需要的时候,我们就应该清理数据,不然早晚要爆内存。
    1. operator(操作符):对observable送出的元素进行操作组合来满足需求
  1. 学习的动力,是为了更好地提升自己,毕竟想自己做出来的东西,能让亿万人群使用。当然money is power。

// 首先要有个observable // 让其成为生产者去生产我们所需要的东西。这一过程就需要我们去看到底项目中需要什么数据,然后我们怎么去生产 (观察者模式就体现出来了,生产者一生产出数据,就让订阅者去消费此数据)

const obs = Rx.observable.create(subscribe => {
    subscribe.next(1);
    subscribe.next(3);
    subscribe.complete(); 
}) // 到此,我们已经建立了生产者obs,其生产的数据我们也编写好了,数据是1,3,// 然后就要考虑去写消费者了 ,不然生产出的数据不被消费的话,数据失去了意义。

// 建立消费者进行数据的消费 // 就是订阅模式中的订阅
// 然后通过next 进行数据的分步骤地消费,这个next就是体现iterate mode的地方。
// es6中引入迭代器的概念:iterator是一种机制,为不同的数据结构提供统一的访问机制,只要部署iterator机制,就能遍历其。
// 如果这样不明白的话,想想看generator 生成器。其中就运用了iterator的概念;

function * generator(){
    yield 1;
    yield 2;
}

const gen = generator; // 写错了,应该是const gen = generator();
gen.next() // 1;
gen.next() // 2; 
// 以上就是生成器中运用

obs.subscribe({
    next: val => console.log(val), // next来消费数据
    error: err => console.log(err), // 用来报错
    complete:() => console.log('complete') // 当数据传递完成就是进入complete status
}) 
// 当我们使用完所有的数据,并不在需要observable的时候,我们就要卸载其,相当于订阅发布模式中卸载
// 使用unsubscrible() 操作符
setTimeout(()=>{ obs.unsubscrible()} ,2000); // 2000ms之后卸载observable
// 以上便是rxjs的过程,剩下的就是学习操作符,就相当学习jq吧。还是要多用
  1. operate symbol
1. create // 创造一个observable

const obs = Rx.Observable
    .create(function (observer) {
        observer.next(1);
        observer.next(2);
        // 可以改写成of的形式 看下面例子
        observer.complete();
    });

2. of // 当我们想要同步地传递某些值的时候,用来释放连续的值

const anthorObs = Rx.Observable
    .of(1, 2) // 替换上个例子
    .subscribe({
        next: val => console.log(val),
        error: err => console.log(err),
        complete: () => console.log('complete')
    })

3. from // 接受任何可列举的参数  // 例如iterator , set, weakset ,string,promise

// const arr = [1, 2, '3', 'komolei'];
// const arr = 'string';
// const arr= new Set([2,3,4]); // 发现很久不使用set,就会忘记,还是要多看es6啊
// 对于promise也可以使用fromPromise 
const arr = new Promise((res, rej) => {
    setTimeout(() => {
        rej(111)
    }, 2000);
    res(111);
})
Rx.Observable
    // .from(arr) 
    .fromPromise(arr) //当使用promise的时候,可以使用
    // .empty() // 空,直接进入compete // 表示其没有做任何事情
    // .never() // 一直存在的却没有都不做的observable
    // .throw('error is komolei') // 只做一件事就是抛出错误
    // .interval(1000) // 每一秒送出一个自增的数字 1s之后送出0,2s之后送出1...依次如许
    // .timer(1000,10000) // 可以指定时间,第一个参数表示第一个值等待的时间,第二个参数表示接下里的值间隔的时间
    // 1s之后送出0,之后每隔10s送出值
    .subscribe({
      next: val => console.log(val),
      error: err => console.log("error is ", err),
      complete: () => console.log("complete")
})

提示

还有挺多的操作符,我就不举例子。大家有兴趣就看link
我基本上都按照上面的文章看下来,敲下来的。讲的很不错的。当然官方文档中文官方文档毕竟要经常读的。毕竟在jq时代,我也不知道记jq的api,都是按照需求,查文档来实现相关逻辑的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容