角 – 如何过滤RXJS ArrayObservable
发布时间:2020-12-17 07:37:16 所属栏目:安全 来源:网络整理
导读:我有一个我想要过滤的数组..听起来很简单我知道. 但是当我做,我仍然得到整个数组… constructor(http:Http) { this._val = Math.random(); let s = http.get('https://secure.digitalsignage.com/Digg'); s.map(s = { let news = JSON.parse(s._body); retur
我有一个我想要过滤的数组..听起来很简单我知道.
但是当我做,我仍然得到整个数组… constructor(http:Http) { this._val = Math.random(); let s = http.get('https://secure.digitalsignage.com/Digg'); s.map(s => { let news = JSON.parse(s._body); return Rx.Observable.fromArray(news); }).filter(function(data) { console.log('all array ' + data); return true; }).subscribe(function (v) { console.log(v); }); } 所以在console.log(‘所有数组’数据);我得到整个数组而不是一个数组成员的流,为什么? 这里是调试快照: 我知道我不是疯了,因为这样可以预期: Rx.Observable.fromArray([1,2,3,4,5]).filter(function (v) { if (v < 3) return true return false; }).subscribe(function (v) { console.log(v); }) 是什么赋予了? tx阅读, 肖恩.
您需要使用
concatMap/
flatMap或任何其他可扩展可观察序列的运算符.
到目前为止,.filter接收到一个可观察数据,而不是数组的各个元素(所有你正在做的是将数组转换为数组的可观察值.第二个例子就像您直接将该过滤器应用于该可观察值). 尝试这个: constructor(http:Http) { this._val = Math.random(); let s = http.get('https://secure.digitalsignage.com/Digg'); s.flatMap(s => { let news = JSON.parse(s._body); return Rx.Observable.fromArray(news); }).filter(function(data) { console.log('all array ' + data); return true; }).subscribe(function (v) { console.log(v); }); } 你需要这样做,否则(使用#map)有一个可观察的可观察值(您可以在observable内部返回一个observable),但想要处理新闻中包含的实际值(而不是包含它们的observable).它有点像连接数组并将其添加为元素的区别. 另一种有效的方法是像以前一样使用地图,但是合并发射的可观察值(flatMap / concatMap只是映射和合并一次) constructor(http:Http) { this._val = Math.random(); let s = http.get('https://secure.digitalsignage.com/Digg'); s.map(s => { let news = JSON.parse(s._body); return Rx.Observable.fromArray(news); }).mergeAll() // here you flatten the observable - i.e. you emit just the values contained in incoming observables and lose the observables themselves .filter(function(data) { console.log('all array ' + data); return true; }).subscribe(function (v) { console.log(v); }); } 如果你不明白任何这个都不用担心,那么people可以比我更好地解释一下:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |