我有这个工作代码。它从路由器获取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));
遗憾的是,这不会调用服务器,也不会将数据传递到客户端。在尝试了几次更改后,由于缺乏想法,我放弃了。
这两种方法之间的显着区别是什么?我对第二个样本的解释在哪里感到困惑?
答案 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