
可以理解RxJS是js事件界的lodash。
cdn:
<script src="https://cdn.bootcdn.net/ajax/libs/rxjs/7.5.5/rxjs.umd.min.js"></script>
Es6
npm install vue vue-rx rxjs --save import Vue from 'vue' import VueRx from 'vue-rx' Vue.use(VueRx)
简单案例:
一次声明多个异步代码
// stream$尾部的$是表示当前这个变量是个ovservable const stream$ = new rxjs.Observable.create(subscriber => { setTimeout(() => { subscriber.next([1, 2, 3]); }, 500); setTimeout(() => { subscriber.next({ a: 1000 }); }, 1000); setTimeout(() => { subscriber.next("end"); }, 3000); setTimeout(() => { subscriber.complete(); }, 2000); }); // 启动流 const subscription = stream$.subscribe({ complete: () => console.log("done"), next: v => console.log(v), error: () => console.log("error") }); // [1,2,3] // 500ms时 // {a:1000} // 1000ms时 // end // 3000ms时 // done // 4000ms时
执行顺序
var observable = rxjs.Observable.create(function (observer) { observer.next(1); observer.next(2); observer.next(3); setTimeout(() => { observer.next(4); observer.complete(); }, 1000); }); console.log('just before subscribe'); observable.subscribe({ next: x => console.log('got value ' + x), error: err => console.error('something wrong occurred: ' + err), complete: () => console.log('done'), }); console.log('just after subscribe'); //just before subscribe //got value 1 //got value 2 //got value 3 //just after subscribe //后面代码会继续执行 //got value 4 //done
complete()后的代码不执行
var observable = Rx.Observable.create(function subscribe(observer) { observer.next(1); observer.next(2); observer.next(3); observer.complete(); //一旦执行complete,就结束了 observer.next(4); // 因为违反规约,不会执行 });
中途停止
var observable = rxjs.Observable.create(function (observer) { observer.next(1); observer.next(2); observer.next(3); setTimeout(() => { observer.next(4); }, 1000); setTimeout(()=>{ observer.complete(); },2000) }); var run = observable.subscribe({ next: x => console.log('got value ' + x), error: err => console.error('something wrong occurred: ' + err), complete: () => console.log('done'), }); setTimeout(()=>{ run.unsubscribe() },1500) //got value 1 //got value 2 //got value 3 //got value 4
外部调用:
var subject = new rxjs.Subject(); document.getElementById('x').onclick=function (){ subject.next(1); } setTimeout(()=>{ subject.next(2); },1000) subject.subscribe({ next: (v) => console.log('值: ' + v) });
rxjs整合vue插件vue-rx官网:https://github.com/vuejs/vue-rx
vue-rx案例:https://blog.csdn.net/kuangshp128/article/details/81561307