【发布时间】:2019-11-04 04:42:22
【问题描述】:
我有以下功能:
从我的商店取值 => 将其转换为 csv => 创建下载链接
downloadCSV() {
let href;
this.store$.select(MissionsStoreSelectors.selectedRoute).pipe(take(1)).subscribe((route) => {
if (route) {
const csv = this.csvManipulatorService.generateCSVFromJSON({filename: route.routeId, data: route.waypoints, columns : ['id', 'position', 'rotation']});
href = this.domSanitizer.bypassSecurityTrustUrl('data:text/csv,' + encodeURIComponent(csv));
}
});
return href;
}
(不要在意没有守卫的事实,是简化的)
我认为订阅不是同步的。但从这个公认的答案:
How to get current value of State object with @ngrx/store?
好像不是。
我的问题是这会在 100% 的时间里起作用吗?订阅是否总是同步的?
【问题讨论】:
-
所有的 observables(任何你可以订阅的)都应该被认为不是同步的。但是您始终可以将 observable 转换为 promise 并将您的函数更改为异步函数。如果您尽可能快地只需要一个值(null 或已定义),那么这是一种可靠的方法
-
旁注:使用可管道
select运算符是自 6.1.0 以来的首选方法。
标签: angular typescript rxjs ngrx