发表于: 2017-06-21 21:43:13

1 898


今天完成的事情:

看了RxJS的东西,还是懵逼的,什么异步回调,promiseRxJS

 

 

明天计划的事情:

 

再找找什么通俗易懂的RxJS入门

 

遇到的问题:

RxJS太难理解了

 

 

收获:

 

RxReactive Extension -- 响应式扩展 http://reactivex.io )最近在各个领域都非常火。其实Rx这个货是微软在好多年前针对C#写的一个开源类库,但好多年都不温不火,一直到Netflix针对Java平台做出了RxJava版本后才在开源社区热度飞速蹿升。

 

我们从最基础的异步回调讲起,然后再从  Promise过渡到 RXJS

异步回调:

在我们平时编程中,当需要解决异步操作时,用得最多的应该就是把回调函数当做参数传递给异步函数了吧

function print_msg(msg) {

//Do something with msg

console.log(msg);

}

function async_read(callback) {

// Some async_work start

// Async get data from a PORT into msg

// Some async_work end

callback(msg);

}

async_read(print_msg);

在例1中,我们通过传递 print_msg 这个回调函数给异步操作 async_read 以达到当异步操作完成时输出从端口读到的 msg 这个目的。

这样看起来,这种方式简单易懂,但是,真的很好用吗?想象一下,我们所传递的回调函数也是一个异步操作,也需要传入一个回调函数来处理异步结果,

 

但如果一旦有多层嵌套,这就麻烦了。

 

于是 Promise 出现了!

Promise

Promise 很好的将这种嵌套式调用转变成了链式调用,使得代码的可读性维护性都更高。对于例1,我们可以这样:

var promise = new Promise(function(resolve, reject) {

// Some async_work start

// Async get data from a PORT into msg

// Some async_work end

if (/* Async_work successed */) {

resolve(msg);

}

else {

reject(error);

}

});

promise.then(function(msg) {

//Do something with msg

console.log(msg)

}, function(error) {

// Failure, do something here

console.log(error);

});

既然有了 Promise,那么何必再加入 RXJS 这个玩意呢?

Promise 有一个缺点,那便是一旦调用了 resolve 或者 reject 之后便返回了,不能再次 resolve 或者 reject,想象一下,若是从端口源源不断地发来消息,每次收到消息就要通知回调函数来处理,那该怎么办呢?

于是,伟大的 RXJS 又出现了!!

RXJS

我们已经知道了 Promise 的作用和用法,通过 Promise 对象,我们可以在完成异步工作之后调用 resolve(X) 通知回调函数异步操作已经完成了,并且生产了可使用的 X 对象。既然 RXJS Promise 更厉害,那么它当然也可以完成这个任务,并且可以做得更好

先从官网搬来rxjs的几个实例概念

Observable: 可观察的数据序列.

Observer: 观察者实例,用来决定何时观察指定数据.

Subscription: 观察数据序列返回订阅实例.

Operators: Observable的操作方法,包括转换数据序列,过滤等,所有的Operators方法接受的参数是上一次发送的数据变更的值,而方法返回值我们称之为发射新数据变更.

Subject: 被观察对象.

Schedulers: 控制调度并发,即当Observable接受Subject的变更响应时,可以通过scheduler设置响应方式,目前内置的响应可以调用Object.keys(Rx.Subject)查看。

我们最常用也最关心的Observable,四个生命周期:创建 、订阅 、 执行 、销毁。

 

    创建Obervable,返回被观察的序列源实例,该实例不具备发送数据的能力,相比之下通过new Rx.Subject创建的观察对象实例具备发送数据源的能力。

    通过序列源实例可以订阅序列发射新数据变更时的响应方法(回调方法)

    响应的动作实际上就是Observable的执行

    通过序列源实例可以销毁,而当订阅方法发生错误时也会自动销毁。

序列源实例的catch方法可以捕获订阅方法发生的错误,同时序列源实例可以接受从catch方法返回值,作为新的序列源实例

 

好吧完全不懂在说什么东西。



返回列表 返回列表
评论

    分享到