相关疑难解决方法(0)

在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万
查看次数

Angular - 缓存 http 响应的最佳方式

我有很多服务请求休息服务,我想缓存从服务器接收的数据以供进一步使用。谁能告诉现金回应的最佳方式是什么?

caching http typescript angular

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

在Angular中使用shareReplay(1)-仍会调用http请求吗?

我创建了一个演示(ng-run),其中有一个调用Http请求的按钮。

当单击按钮时,我调用此方法:

public getData(){
 this._jokeService.getData().subscribe();
}
Run Code Online (Sandbox Code Playgroud)

依次调用此(从服务):

 public getData() {
    return this.http.get(API_ENDPOINT).pipe(shareReplay(1))
  }
Run Code Online (Sandbox Code Playgroud)

问题在于每次点击-我仍然看到启动了一个新的http请求:

在此处输入图片说明

题:

为什么shareReplay不保留响应的最后一个值?
如何使我的代码仅调用一次HTTP并保留该值以备将来使用?

编辑:解决方案在这里

javascript rxjs angular rxjs6

8
推荐指数
2
解决办法
3834
查看次数