Angular RxJS阻止双API调用

Angular RxJS阻止双API调用

问题描述:

我想重新使用RxJS流的结果而不再执行它。Angular RxJS阻止双API调用

在一个组件中我必须Input()流:query$category$。我想将它转换为共享相同API源的两个流。现在它提出两个请求。我只想要一个请求。

简化代码:

this.searchResults$ = this.query$ 
    .switchMap((query) => this.httpClient.get(`/whatever?q=${query}`)); 

this.filteredSearchResults$ = Observable 
    .combineLatest(this.searchResults$, this.category$) 
    .filter(([ searchResults, category ]) => { 
    // Code to make a subset 

    return ['a', 'subset']; 
    }); 

我消耗都SearchResult所$和$ filteredSearchResults在同一组件:

<ng-container *ngIf="(searchResults$ | async) as searchResults"> 
    <ng-container *ngIf="(filteredSearchResults$ | async) as filteredSearchResults"> 
    </ng-container> 
</ng-container> 

现在我明白为什么有两个API调用。我只是没有看到任何方法来阻止它。

您可能需要使用share

this.searchResults$ = this.query$ 
    .switchMap((query) => this.httpClient.get(`/whatever?q=${query}`)) 
    .share(); <-- HERE 

this.filteredSearchResults$ = Observable 
    .combineLatest(this.searchResults$, this.category$) 
    .filter(([ searchResults, category ]) => { 
    // Code to make a subset 

    return ['a', 'subset']; 
    }); 
+0

它现在的工作部分。在页面加载两个流按预期工作。但是,只要查询$或类别$的其中一个发生变化,我就会得到一个带有旧值的额外请求。以及具有新值的正常请求。 –