Angular 使用异步管道时,表达式ChangedTerithasBeenCheckedError

Angular 使用异步管道时,表达式ChangedTerithasBeenCheckedError,angular,asynchronous,observable,Angular,Asynchronous,Observable,当我使用异步管道时,我得到了这个错误(ExpressionChangedTerithasBeenCheckedError)!代码是。 我哪里做错了?我认为错误来自{{users$|async | json}。 在布局服务中,它返回null并试图显示它会导致错误 我像那样测试,我没有任何错误 布局组件 旋转。。。 StateSpinner:{{layoutService.getSpinnerState | async}} 编辑: 如果我理解错误的话,那就是你观察到的变化造成的 您可以在调用布局服

当我使用异步管道时,我得到了这个错误(ExpressionChangedTerithasBeenCheckedError)!代码是。
我哪里做错了?

我认为错误来自
{{users$|async | json}
。 在布局服务中,它返回null并试图显示它会导致错误

我像那样测试,我没有任何错误

布局组件 旋转。。。 StateSpinner:{{layoutService.getSpinnerState | async}}

编辑:

如果我理解错误的话,那就是你观察到的变化造成的

您可以在调用布局服务时执行类似操作。你怎么认为?我觉得它更干净

withSpinner<T>(obs:Observable<T>){
    this.setSpinnerState(true)
    return obs.pipe(
      delay(2000),
      finalize(()=>this.setSpinnerState(false))
    );
  }
withSpinner(obs:可观察){
此.setSpinnerState(true)
回油管(
延迟(2000年),
完成(()=>this.setSpinnerState(false))
);
}

再次查看错误:“错误错误:ExpressionChangedTerithasBeenCheckedError:Expression在检查后已更改。以前的值:“ngIf:[对象]”。当前值:“ngIf:true”。“这不是一个好的反应式编程实践。因为微调器是激活的,尽管还没有人订阅它。这不是问题所在。我明白你的意思。如果您希望在每个http请求中都有一个加载器,那么只需为http请求使用一个拦截器即可。
withSpinner<T>(obs:Observable<T>){
    this.setSpinnerState(true)
    return obs.pipe(
      delay(2000),
      finalize(()=>this.setSpinnerState(false))
    );
  }