Angular NGRX选择器的可观察或异步/等待?

Angular NGRX选择器的可观察或异步/等待?,angular,rxjs,ngrx,Angular,Rxjs,Ngrx,我有一个ngrx商店,我正在调用ngOnInit上的选择器(见下面的代码)。有人说我应该把这个调用放在async/wait中,因为我只等待一个值。我不确定这是不是正确的方法,因为当发射完成时,observable调用它的complete()函数,并且因为只有一个值,它将立即调用complete()。有人有不同的观点或更好的方法吗?多谢各位 ngOnInit(){ this.store.pipe(select(selectSomeString), takeUntil(this.destro

我有一个ngrx商店,我正在调用ngOnInit上的选择器(见下面的代码)。有人说我应该把这个调用放在async/wait中,因为我只等待一个值。我不确定这是不是正确的方法,因为当发射完成时,observable调用它的complete()函数,并且因为只有一个值,它将立即调用complete()。有人有不同的观点或更好的方法吗?多谢各位

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(),看看是否会发生这种情况?