角 – 如何过滤RXJS ArrayObservable

前端之家收集整理的这篇文章主要介绍了角 – 如何过滤RXJS ArrayObservable前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个我想要过滤的数组..听起来很简单我知道.
但是当我做,我仍然得到整个数组…
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);
    });
}
@H_301_4@所以在console.log(‘所有数组’数据);我得到整个数组而不是一个数组成员的流,为什么?

@H_301_4@这里是调试快照:

@H_301_4@

@H_301_4@我知道我不是疯了,因为这样可以预期:

Rx.Observable.fromArray([1,2,3,4,5]).filter(function (v) {
        if (v < 3)
            return true
        return false;
    }).subscribe(function (v) {
        console.log(v);
    })
@H_301_4@是什么赋予了?

@H_301_4@tx阅读,

@H_301_4@肖恩.

您需要使用 concatMap/ flatMap或任何其他可扩展可观察序列的运算符. @H_301_4@到目前为止,.filter接收到一个可观察数据,而不是数组的各个元素(所有你正在做的是将数组转换为数组的可观察值.第二个例子就像您直接将该过滤器应用于该可观察值).

@H_301_4@尝试这个:

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);
  });
}
@H_301_4@你需要这样做,否则(使用#map)有一个可观察的可观察值(您可以在observable内部返回一个observable),但想要处理新闻中包含的实际值(而不是包含它们的observable).它有点像连接数组并将其添加为元素的区别.

@H_301_4@另一种有效的方法是像以前一样使用地图,但是合并发射的可观察值(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);
  });
}
@H_301_4@如果你不明白任何这个都不用担心,那么people可以比我更好地解释一下:)

原文链接:https://www.f2er.com/angularjs/142577.html

猜你在找的Angularjs相关文章