从RXJS中的第一个订阅开始,第二个订阅不会从switchMap开始

时间:2020-02-08 21:07:58

标签: angular typescript rxjs switchmap

我有这个工作代码。它从路由器获取ID,并将其作为参数应用,以获取组件数据中的负载。

this.route.params.subscribe(_ => {
  this.id = _.id;
  this.service.getMineral(this.id)
    .subscribe(suc => this.data = suc, err => console.log(err));
  }
);

然后,我尝试使用更好的方法,并希望在第一个订阅完成时调用第二个订阅。根据{{​​3}},我应该共享第一个结果,然后切换map使其退订并继续下一个结果。因此,我实现了以下内容。

const route$ = this.route.params.pipe(share());
const data$ = route$.pipe(
  switchMap(() => this.service.getMineral(this.id)));

route$.subscribe(_ => this.id = _.id);
data$.subscribe(suc => this.data = suc, err => console.log(err));

遗憾的是,这不会调用服务器,也不会将数据传递到客户端。在尝试了几次更改后,由于缺乏想法,我放弃了。

这两种方法之间的显着区别是什么?我对第二个样本的解释在哪里感到困惑?

1 个答案:

答案 0 :(得分:1)

我认为您的方法不好。您应该将其链接到一个可观察的目录中并进行订阅。像

from datetime import datetime
N = 1200
diag_matricies = np.zeros([N, N, N])
diagonals = np.arange(N * N).reshape((N, N))

start = datetime.now()
index = np.arange(N)
diag_matricies[:, index, index] = diagonals
print('advanced indexing: ', datetime.now() - start)

start = datetime.now()
for i in range(N):
    diag_matricies[i] = np.diag(diagonals[i])
print('for loop: ', datetime.now() - start)

# advanced indexing:  0:00:01.537120
# for loop:  0:00:07.281833