标签: rxjs5

在RxJs 5中分享Angular Http网络调用结果的正确方法是什么?

通过使用Http,我们调用一个执行网络调用并返回http observable的方法:

getCustomer() {
    return this.http.get('/someUrl').map(res => res.json());
}
Run Code Online (Sandbox Code Playgroud)

如果我们采用这个可观察的并添加多个订阅者:

let network$ = getCustomer();

let subscriber1 = network$.subscribe(...);
let subscriber2 = network$.subscribe(...);
Run Code Online (Sandbox Code Playgroud)

我们想要做的是确保这不会导致多个网络请求.

这可能看起来像是一个不寻常的场景,但实际上很常见:例如,如果调用者订阅了observable以显示错误消息,并使用异步管道将其传递给模板,那么我们已经有两个订阅者.

在RxJs 5中这样做的正确方法是什么?

也就是说,这似乎工作正常:

getCustomer() {
    return this.http.get('/someUrl').map(res => res.json()).share();
}
Run Code Online (Sandbox Code Playgroud)

但这是在RxJs 5中这样做的惯用方式,还是我们应该做其他事情呢?

注意:根据Angular 5 new HttpClient,.map(res => res.json())所有示例中的部分现在都没用,因为现在默认采用JSON结果.

rxjs angular2-services rxjs5 angular

281
推荐指数
11
解决办法
8万
查看次数

可观察最后订阅

根据这个artcle,onCompleteonError功能subscribe是互斥的.

任何意义onErroronComplete事件将在我的事件中激起subscribe.
我有一个逻辑块,无论是否收到错误都需​​要执行,或者我成功完成了大量的信息.

finally在python中查找类似的内容,但我发现的只是finally需要附加到我创建的可观察对象上.

但是我想在我订阅时,在流结束后,无论是成功还是出错,都要做这个逻辑.

有任何想法吗?

javascript rxjs rxjs5

84
推荐指数
3
解决办法
6万
查看次数

如何从里面有Observable订阅的函数返回值?

我不知道如何从Observable中提取值以由Observable存在的函数返回.我只需要从中返回一个值,没有别的.

当前版本有效

function getValueFromObservable() {
    this.store.subscribe(
        (data:any) => {
            console.log(data)
        }
    )
}
getValueFromObservable()
Run Code Online (Sandbox Code Playgroud)

我需要这个工作,函数返回值,然后:

function getValueFromObservable() {
    this.store.subscribe(
        (data:any) => {
            return data
        }
    )
}
console.log(getValueFromObservable())
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

rxjs typescript rxjs5 angular

71
推荐指数
4
解决办法
12万
查看次数

什么是rxJS中的管道

我认为我有基本概念,但有一些晦涩难懂

所以一般来说这就是我使用observable的方式:

observable.subscribe(x => {

})
Run Code Online (Sandbox Code Playgroud)

如果我想过滤数据,我可以使用:

import { first, last, map, reduce, find, skipWhile } from 'rxjs/operators';
observable.pipe(
    map(x => {return x}),
    first()
    ).subscribe(x => {

})
Run Code Online (Sandbox Code Playgroud)

我也可以这样做:

import 'rxjs/add/operator/map';
import 'rxjs/add/operator/first';

observable.map(x => {return x}).first().subscribe(x => {

})
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  1. 有什么不同?
  2. 如果没有区别,为什么功能管存在?
  3. 为何这些功能需要不同的进口?

rxjs rxjs5 angular

66
推荐指数
5
解决办法
4万
查看次数

冷热观察:有"热"和"冷"运营商吗?

我回顾了以下SO问题: 什么是热和冷可观测量?

总结一下:

  • 当一个cold observable有一个观察者使用它时,它会发出它的值,即观察者接收的值序列与订阅时间无关.所有观察者都将使用相同的值序列.
  • 热的observable独立于其订阅发出值,即观察者接收的值是订阅时间的函数.

然而,我觉得热和冷仍然是混乱的根源.所以这是我的问题:

  • 默认情况下所有rx可观察量是否都是冷的(主题除外)?

    我经常读到事件是热观察的典型隐喻,但我也读到这Rx.fromEvent(input, 'click')是一个冷可观察的(?).

  • 是否有什么/哪些Rx运算符将冷观测值转换为热观测值(除了publish和之外share)?

    例如,它如何与Rx运算符一起使用withLatestFrom?让我们cold$成为一个冷酷的观察者.会sth$.withLatestFrom(cold$,...)是一个热门观察?

    或者,如果我不sth1$.withLatestFrom(cold$,...), sth2$.withLatestFrom(cold$,...)和订阅sth1sth2,将我总是看到两个相同的值sth

  • 我认为Rx.fromEvent会产生冷的可观测量,但事实并非如此,正如其中一个答案所述.但是,我仍然对此行为感到困惑:codepen.io/anon/pen/NqQMJR?editors=101.不同的订阅从同一个observable获得不同的值.click事件不是共享的吗?

javascript reactive-programming rxjs rxjs5 angular

60
推荐指数
2
解决办法
1万
查看次数

每隔一段时间Angular2 + http

我对angular和rxjs很新.我正在尝试创建一个angular2应用程序,从静态服务的文本文件(本地服务器)获取一些数据,我想检索并使用Angular2的http提供程序和rxjs的映射在固定时间映射到Datamodel interval(5000).反映对服务的txt文件的任何更改.

使用rxjs 4.x我知道你可以Observable.interval(5000)用来完成这项工作,但它似乎不存在于rxjs 5中.我的解决方法当前刷新整个应用程序使用<meta http-equiv="refresh" content="5" >哪个重新加载整个页面,从而重新加载数据.

所以我真正想要的是使用observable进行此操作的一些方法,也许是为了检查是否发生了任何更改.或者只是重新加载数据.

任何帮助或其他/更好的方式将非常感谢.

到目前为止我所拥有的:

@Injectable()
export class DataService {

    constructor(private http:Http){}

    getData(url) {
        return this.http.get(url)
            .map(res => {
                return res.text();
            })
            .map(res => {
                return res.split("\n");
            })
            .map(res => {
                var dataModels: DataModel[] = [];
                res.forEach(str => {
                    var s = str.split(",");
                    if(s[0] !== "") {
                        dataModels.push(new DataModel(s[0], parseInt(s[1]), parseInt(s[2])));
                    }
                });
                return dataModels;
            })
    }
}

@Component({
selector: 'my-app',
template: `Some html to display the data`,
providers: …
Run Code Online (Sandbox Code Playgroud)

rxjs5 angular

60
推荐指数
4
解决办法
7万
查看次数

何时在rxjs中使用asObservable()?

我想知道有什么用途asObservable:

根据文档:

可观察的序列,隐藏源序列的身份.

但为什么你需要隐藏序列?

rxjs rxjs5

57
推荐指数
4
解决办法
3万
查看次数

RxJS中的链接可观察量

我正在学习RxJS和Angular 2.假设我有一个带有多个异步函数调用的promise链,它取决于前一个的结果,如下所示:

var promiseChain = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(1);
  }, 1000);
}).then((result) => {
  console.log(result);

  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(result + 2);
    }, 1000);
  });
}).then((result) => {
  console.log(result);

  return new Promise((resolve, reject) => {
      setTimeout(() => {
      resolve(result + 3);
        }, 1000);
  });
});

promiseChain.then((finalResult) => {
  console.log(finalResult);
});
Run Code Online (Sandbox Code Playgroud)

我在不使用promise的情况下单独使用RxJS的尝试产生了以下结果:

var observableChain = Observable.create((observer) => {
  setTimeout(() => {
    observer.next(1);
    observer.complete();
  }, 1000);
}).flatMap((result) => {
  console.log(result);

  return Observable.create((observer) …
Run Code Online (Sandbox Code Playgroud)

javascript reactive-programming promise rxjs rxjs5

57
推荐指数
1
解决办法
8万
查看次数

Rxjs:Observable.combineLatest vs Observable.forkJoin

只是想知道Observable.combineLatest和 之间的区别是什么Observable.forkJoin?据我所知,唯一的区别是forkJoin期望Observables完成,同时combineLatest返回最新的值.

rxjs rxjs5

57
推荐指数
3
解决办法
2万
查看次数

.unsubscribe到.take(1)之间的区别

我想知道,如果在订阅之后使用.take(1)和使用.unsubscribewhen 之间的性能有任何差异unsubscribe:

var observable = Rx.Observable.interval(100);
Run Code Online (Sandbox Code Playgroud)

第一:

var subscription = observable.subscribe(function(value) {
   console.log(value);
}).unsubscribe();
Run Code Online (Sandbox Code Playgroud)

第二:

var subscription = observable.take(1).subscribe(function(value) {
    console.log(value);
});
Run Code Online (Sandbox Code Playgroud)

它的任何想法都会对性能产生任何不同的看法?

observable rxjs rxjs5

50
推荐指数
2
解决办法
2万
查看次数