且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

仅当不共享订阅时,AsyncPipe初始值才为null

更新时间:2023-11-30 21:36:58

第一种情况:

  1. 计算ngIf表达式.它订阅了可观察对象,并且评估为null.因此,由于ngIf表达式是虚假的,因此不对[result]表达式进行求值.
  2. 可观察对象发出,并且ngIf表达式变为真.因此,对[结果]表达式进行了评估.它自己的异步管道订阅了Cold Observable,后者发送了另一个请求,并求值为null,因此将其作为输入传递给组件.

第二种情况:

  1. 计算ngIf表达式.它订阅了可观察对象,并且评估为null.因此,由于ngIf表达式是虚假的,因此不对[result]表达式进行求值.
  2. observable发出,并且ngIf表达式变为true.因此,对[结果]表达式进行了评估.它自己的异步管道订阅了hot observable,后者立即重播上一次发出的内容,并且不再发送请求.因此,将表达式的值计算为非null值,并将其作为输入传递给组件.

比使用shareReplay更好的解决方案是将异步管道的结果存储在变量中并使用它:

A better solution than using shareReplay would be to store the result of the async pipe in a variable and use it:

<some-component
  *ngIf="someColdObservable$ | async as result"
  [result]="result"
></some-component>