Angular NGRX选择器的可观察或异步/等待?
我有一个ngrx商店,我正在调用ngOnInit上的选择器(见下面的代码)。有人说我应该把这个调用放在async/wait中,因为我只等待一个值。我不确定这是不是正确的方法,因为当发射完成时,observable调用它的complete()函数,并且因为只有一个值,它将立即调用complete()。有人有不同的观点或更好的方法吗?多谢各位Angular NGRX选择器的可观察或异步/等待?,angular,rxjs,ngrx,Angular,Rxjs,Ngrx,我有一个ngrx商店,我正在调用ngOnInit上的选择器(见下面的代码)。有人说我应该把这个调用放在async/wait中,因为我只等待一个值。我不确定这是不是正确的方法,因为当发射完成时,observable调用它的complete()函数,并且因为只有一个值,它将立即调用complete()。有人有不同的观点或更好的方法吗?多谢各位 ngOnInit(){ this.store.pipe(select(selectSomeString), takeUntil(this.destro
ngOnInit(){
this.store.pipe(select(selectSomeString), takeUntil(this.destroy$)).subscribe(
(someString) => this.checkIfValid(someString)
);
}
private checkIfValid(someString: string){
//some code
}
只需要一个值并不是在
async/await
中包装选择器的理由
NgRx本质上是反应性的,大量使用RxJS。RxJS提供了足够的运算符来限制您执行的事件数(例如,take(1)
)。在您的例子中,如果源只发出一个值,那么就没有理由使用任何其他运算符
如果一个可观测源只发出一个值,那么订阅该源不会有任何伤害或风险
不要忘记取消订阅,否则可能会导致内存泄漏。只需要一个值并不是将选择器包装在
async/wait
中的原因
NgRx本质上是反应性的,大量使用RxJS。RxJS提供了足够的运算符来限制您执行的事件数(例如,take(1)
)。在您的例子中,如果源只发出一个值,那么就没有理由使用任何其他运算符
如果一个可观测源只发出一个值,那么订阅该源不会有任何伤害或风险
不要忘记取消订阅,否则可能会导致内存泄漏。我假设您只使用第一个发出的值,因为您在问题上提到您只等待一个值 在这种情况下,我建议您在
选择
操作符之后,在选择
操作符之前,使用take
操作符
this.store.pipe(
select(selectSomeString),
takeUntil(this.destroy$))
.subscribe((someString) =>
this.checkIfValid(someString)
);
使用
获取(1)
将确保获取第一个发射值。您可以阅读有关运算符的更多信息。我假设您只使用第一个发出的值,因为您在问题中提到您只等待一个值
在这种情况下,我建议您在选择
操作符之后,在选择
操作符之前,使用take
操作符
this.store.pipe(
select(selectSomeString),
takeUntil(this.destroy$))
.subscribe((someString) =>
this.checkIfValid(someString)
);
使用
获取(1)
将确保获取第一个发射值。您可以阅读有关运算符的更多信息。只有一个值,没有一个值流。我的选择器实际上是从具有属性的功能状态获取的。所以我不需要使用take(1)操作符,对吗?是的,没错,但它可能会发射多次。您可以尝试添加一些console.log(),看看是否会发生这种情况?只有一个值,没有一个值流。我的选择器实际上是从具有属性的功能状态获取的。所以我不需要使用take(1)操作符,对吗?是的,没错,但它可能会发射多次。您可以尝试添加一些console.log(),看看是否会发生这种情况?