С комбинацией concat
, merge
, mapTo
и timer
вы получите то, что вы хотите, я думаю:
readonly restCall$ = this.http.get().pipe(
shareReplay({ refCount: true, bufferSize: 1 })
);
readonly loading$ = concat(
race(
this.restCall$.pipe(
mapTo(false)
),
timer(500).pipe(
mapTo(true)
)
),
this.restCall.pipe(
mapTo(false)
)
);
Вы измените свой шаблон на:
<div *ngIf="!(loading$ | async); else skeleton">
<span *ngFor="let item of items">{{item}}</span>
</div>
<ng-template #skeleton>
<my-skeleton></my-skeleton>
</ng-template>
отказ от ответственности: может быть, есть более элегантное решение, но я не вижу его сейчас. Я обвиняю это в том, что я опоздал на день и уже в пасхальном настроении