Rxjs:用creation operator创建observable

3 篇文章 0 订阅

 根据官网创建操作符, 本篇文章介绍其中一些常用操作符。 

 

create

想到创建observable, 最基本的就是create。下面是一个基本的例子:

var source = Rx.Observable.create(function(observer){
      observer.next('hello');
      observer.next('i want to study rxjs');
      observer.complete();
});

source.subscribe({
   next: function(value){
      console.log(value);
   }
   complete: function(){
      console.log('complete');
   }
   error: function(error){
      console.log(error);
   }
});

输出:

hello

i want to study rxjs

complete

基于上面的例子, 我们试着用其他操作符进行改写吧!

 

of

var source = Rx.Observable.of('hello', 'i want to study rxjs');

输出:

hello

i want to study rxjs

complete

与create相比, 优点就是非常简洁。

 

from

上面的of传入的参数是一个一个的, 如果我们想把一个数组传入呢?可以用from来接收任何可枚举的参数。

var arr = ['hello', 'world', 123];
var source = Rx.Observable.from(arr);

输出:

hello

world

123

complete

 from 还可以接收字符串,此时就是字符依次输出。有空格也会输出空字符。

var source = Rx.Observable.from('hi');

输出:

h

i

complete

from 中任何可列举的参数都可用, 还可以传入 Promise函数。

var source = Rx.Observable.from(
   new Promise((resolve, reject) => {
      setTimeout(() => { resolve('hello rxjs')}, 3000)
   })
);

输出:

hello rxjs

complete

如果传入Promise,当正常返回时, 就会被送到next, 并立即发出完成通知, 如果有错误就会送到error。

fromEvent

rxjs还可以根据event建立Observable.

var source = Rx.Observable.fromEvent(document.body, 'click');

补充,另一个方法fromEventPattern, 这个是给类使用。这里的类指的是行为和时间相像, 同时具有注册监听和移除监听两种行为。

var pro = new Producer();
var source = Rx.Observable.fromEventPattern(
    (handler) => pro.addListener(handler);
    (handler) => pro.removeListener(handler);
);
pro.notify('this is from event operation.');

输出:

this is from event operation.

 

empty

empty像是数学上的零(0), 虽然好像什么都没做, 但却相当重要。

var source = Rx.Observable.empty();
//complete

empty会立即发送出complete的消息。可以把它想像成什么都没做, 但它至少会告诉你它没做任何事。

 

never

与0相反的是无穷(∞), 它就好像在无穷久之后才会结束的observable。

var source = Rx.Observable.never();

 

throw

顾名思义, 就是抛出错误。

var source = Rx.Observable.throw('Oops!');
//Oops!

 

interval

interval返回一个无限递增的序列整数。

var source = Rx.Observable.interval(1000);
//0, 1, 2, ...

 

timer

timer有两个形参, 第一个是初始延时,第二个之后的每一次延时。

var source = Rx.Observable.timer(3000, 1000);
//在3秒时,输出0,之后每一次间隔1秒依次递增输出。 

timer 第一个参数除了可以是数值(Number)之外,也可以是日期(Date),就会等到指定的时间在发送第一个值。

另外 timer 也可以只接收一个参数。

var source = Rx.Observable.timer(1000);

此时, 等待一秒之后输出0就结束了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值