【问题标题】:Error related to rxjs uprade to 6 "switchMap is not a function"与 rxjs 升级到 6“switchMap 不是函数”相关的错误
【发布时间】:2018-12-16 23:44:16
【问题描述】:
 return auth.refreshToken().switchMap((token) => {
                if (token) {

                    return next.handle(this.addToken(req));
                }

                // If we don't get a new token, logout.
                auth.logoutUser(0);
                return empty;

            }).catch((e: any) => {
                // If there is an exception calling 'refreshToken', logout.
                auth.logoutUser(0);
                return empty;
            }).finally(() => {
                this.isRefreshingToken = true;
            });

这在 Angular 上运行得非常好。

"rxjs": "^5.4.3", "@angular/common": "^5.0.3",

升级后,

"@angular/common": "^6.0.3", "rxjs": "^6.0.0"

我收到运行时错误

"ApiService::handleError TypeError: auth.refreshToken(...).switchMap is not a function
".

通过搜索发现解决方案是添加管道,所以添加了

 return auth.refreshToken().pipe(switchMap((token) => {
                if (token) {

                    return next.handle(this.addToken(req));
                }

                // If we don't get a new token, logout.
                auth.logoutUser(0);
                return empty;

            }).catch((e: any) => {
                // If there is an exception calling 'refreshToken', logout.
                auth.logoutUser(0);
                return empty;
            }).finally(() => {
                this.isRefreshingToken = true;
            });

但它会引发新的编译时错误

Argument of type '(token: {}) => Observable<HttpEvent<any>> | ((scheduler?: SchedulerLike) => Observable<never>)' is not assignable to parameter of type '(value: {}, index: number) => ObservableInput<HttpEvent<any>>'."

看起来是 rxjs 升级的问题,有什么办法解决这个问题?

修改导入自,

import { switchMap } from "rxjs/operators"; to 
import 'rxjs/add/operator/switchMap'; 

现在它给出了以下代码部分的错误“错误TS2304:找不到名称'switchMap'。”

 return this.tokenSubject.pipe(
                filter(token => token != null),
                take(1),
                switchMap(token => {
                    return next.handle(this.addToken(req));
                })
            );

【问题讨论】:

  • import 'rxjs/add/operator/switchMap';
  • 它在从“rxjs/operators”中更改 import { switchMap } 时出现新错误;导入 'rxjs/add/operator/switchMap';.. 更新问题
  • 在进行角度升级时,您是否尝试了update.angular.io 中列出的所有步骤?
  • @Capricorn 是的尝试过

标签: angular typescript angular6 rxjs6


【解决方案1】:

快速解决方法是安装 rxjs-compat,您的旧代码不需要任何更改。但是,对于第 5 版中引入的功能,Rxjs 6 是更稳定的版本。所以建议您返回文档并将您的导入和 rxjs 使用迁移到 Rxjs 6。

npm install --save rxjs-compat

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2021-10-25
    • 2020-03-31
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多