[RxJS] Using Observable.create for fine-grained control
2016-02-25 15:50
573 查看
Sometimes, the helper methods that RxJS ships with such as
For example, the following code need add a filter method to filter the null value from the event.
We can use create method to do:
So to recap, sometimes the values that are projected from the helpers that RXJS ships with, are not exactly what you want, and you end up having to do a little bit of extra work to force them into the shape that want. If you find yourself doing this, you can always use create instead.
Create is the factory function that creates an anonymous observable for you, gives you the opportunity to only project the values that you want. You end up having to do a bit more manual work, such as adding event listeners and removing them finished with, but the result will be greater performance and greater control.
fromEvent,
fromPromiseetc don't always provide the exact values you want & you end up having to do extra work to force them into the shape you require. For more fine-grained control you can use
Observable.createwhich allows you to project only the values which matter to you.
For example, the following code need add a filter method to filter the null value from the event.
const fromEvent = Rx.Observable.fromEvent; function delegate (wrapperSelector, elementSelector, eventName) { return fromEvent( document.querySelector(wrapperSelector), eventName, (ev) => { return ev.target.closest(elementSelector); } ).filter(x => x !== null) } delegate('.wrapper', 'button', 'click') .subscribe(x => { document.querySelector('#output').textContent = `Button ${x.textContent} clicked`; });
We can use create method to do:
const create = Rx.Observable.create; function delegate (wrapperSelector, elementSelector, eventName){ return create( (observe)=> { const wrapper = document.querySelector(wrapperSelector); const handler = (ev) => { const match = ev.target.closest(elementSelector); if(match) { return observe.onNext(match); } } wrapper.addEventListener(eventName, handler, false); // cancel the listener return ()=>{ wrapper.removeEventListener(eventName, handler); } }); }
So to recap, sometimes the values that are projected from the helpers that RXJS ships with, are not exactly what you want, and you end up having to do a little bit of extra work to force them into the shape that want. If you find yourself doing this, you can always use create instead.
Create is the factory function that creates an anonymous observable for you, gives you the opportunity to only project the values that you want. You end up having to do a bit more manual work, such as adding event listeners and removing them finished with, but the result will be greater performance and greater control.
相关文章推荐
- js获取浏览器信息及屏幕分辨率
- JSONP跨域GET请求
- jstl标签fn
- 通过js注入解决浏览器输入法方案文档
- JavaScript 正则表达式中global模式的特性
- 我在JS上解惑之路1
- 使用javascript以post的方式向服务器提交数据
- JavaScript 打开子窗口
- jsoup基础
- dialog使用方法(同一页面,调用一个js代码,实现多个不同样式的弹窗)
- 深入分析 Javascript 单线程
- JavaScript小技巧
- Javascript中Element元素定位详解
- 减少js对性能的影响
- JS的 escape、encodeURI 、encodeURIComponent 编码与解码
- 在js中json遍历List<E>
- js点击弹框优酷视频
- javascript中的function(){}
- javascript动态获取登录时间和在线时长
- Json数据整理(org-Json + json-lib)