Angular switchMap不取消以前的请求

Angular switchMap不取消以前的请求,angular,rxjs,Angular,Rxjs,我正在实现和自动完成搜索功能。我希望使用switchMap()取消以前的请求。我遵循了多个指南,但似乎都不起作用 触发此主题时我会得到结果,但在查看“网络”选项卡时,之前的api调用均未被取消。它只是说“待定” 代码如下: filterFolders$: Subject < string > = new Subject<string>(); filterFolderSubscription = this.filterFolders$.pipe( switchMa

我正在实现和自动完成搜索功能。我希望使用
switchMap()
取消以前的请求。我遵循了多个指南,但似乎都不起作用

触发此主题时我会得到结果,但在查看“网络”选项卡时,之前的api调用均未被取消。它只是说“待定”

代码如下:

filterFolders$: Subject < string > = new Subject<string>();

filterFolderSubscription = this.filterFolders$.pipe(
    switchMap((text) => this.folderService.searchFolders(<any>{ searchedName: text }))
)
    .subscribe(res => {
        this.filteredFolders = res.items;
    })


filterFolders(value: string){
    if (value != '') {
        this.isFilterUpdating = true;
        this.filterFolders$.next(value);
    }
}

取决于此.folderService.searchFolders的实现方式SwitchMap仅取消observable not http调用,如果设置了http,则无法执行该调用canceled@FanCheung我不这么认为。这段代码适用于我的其他应用程序。唯一的区别是它指向另一个api。在某些情况下,端点是否返回错误?@yevhenidovhaniuk是的。我试着反对我的另一个后端,但同样的问题出现了。因此,它与后端无关。
searchFolders(input: SearchFolderDto | null | undefined): Observable<ListResultDtoOfFolderAccessInstanceDto> {
        let url_ = this.baseUrl + "/api/services/app/Folder/SearchFolders";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(input);

        let options_ : any = {
            body: content_,
            observe: "response",
            responseType: "blob",
            headers: new HttpHeaders({
                "Content-Type": "application/json", 
                "Accept": "application/json"
            })
        };

        return this.http.request("post", url_, options_).pipe(_observableMergeMap((response_ : any) => {
            return this.processSearchFolders(response_);
        })).pipe(_observableCatch((response_: any) => {
            if (response_ instanceof HttpResponseBase) {
                try {
                    return this.processSearchFolders(<any>response_);
                } catch (e) {
                    return <Observable<ListResultDtoOfFolderAccessInstanceDto>><any>_observableThrow(e);
                }
            } else
                return <Observable<ListResultDtoOfFolderAccessInstanceDto>><any>_observableThrow(response_);
        }));
    }

    protected processSearchFolders(response: HttpResponseBase): Observable<ListResultDtoOfFolderAccessInstanceDto> {
        const status = response.status;
        const responseBlob = 
            response instanceof HttpResponse ? response.body : 
            (<any>response).error instanceof Blob ? (<any>response).error : undefined;

        let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }};
        if (status === 200) {
            return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = resultData200 ? ListResultDtoOfFolderAccessInstanceDto.fromJS(resultData200) : new ListResultDtoOfFolderAccessInstanceDto();
            return _observableOf(result200);
            }));
        } else if (status !== 200 && status !== 204) {
            return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            }));
        }
        return _observableOf<ListResultDtoOfFolderAccessInstanceDto>(<any>null);
    }