rx 应用
理解流:
- 用户在页面上的持续交互就是一条条事件流,比如一个input的输入流。
- 一个事件的整条处理链路(设置loading,组装参数,发请求,取消loading)就是一个流。
- 一个数据来自多个来源。就可以定义一条新的数据流,merge了多个来源流。每一个来源变化都能触发数据流的更新。
api:
bindCallBack:转换具有 callback 功能的函数为 Observable
function queryData(name, password, callback) { setTimeout(()=>{ callback("200"); }, 1000); } const obsFactory = bindCallback(queryData); obsFactory('harry','123') .subscribe(x=>{ console.log(x); // x = 200 })
combineLatest:组合多个 Observable,并保持未更新的历史数据,同时更新最后已知数据。
const one = new Subject(); const two = new Subject(); combineLatest([one, two]).subscribe(x=>{ console.log(x); }) one.next(1); // 第一个action已响应,等待第二个action two.next('a');// 第二个 action 响应,输出第一个、第二个参数结果 [1,'a'] two.next('b');// 第二个 action 再次响应,第一个结果采用历史数据,第二个更新 [1, 'b']
concat:组合多个 Observable
const obs1 = new Observable(sub=>{ setTimeout(()=>{ sub.next(1); sub.complete(); },1000) }) const obs2 = new Observable(sub=>{ setTimeout(()=>{ sub.next(2); sub.complete(); },0) }) concat(obs1, obs2).subscribe(x=>{ console.log(x); // 1, 2 },null,()=>{ console.log('success') });
推荐文章:https://zhuanlan.zhihu.com/p/25383159