首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与rxjs有关的错误(6) "switchMap不是函数“

与rxjs有关的错误(6) "switchMap不是函数“
EN

Stack Overflow用户
提问于 2018-07-09 10:10:55
回答 1查看 1.6K关注 0票数 0
代码语言:javascript
运行
复制
 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;
            });

这个角度很好。

"rxjs":"^5.4.3“、”@角/公共“:"^5.0.3",

一旦升级,

“@ar角/公共”:"^6.0.3","rxjs":"^6.0.0"

我得到了运行时错误

代码语言:javascript
运行
复制
"ApiService::handleError TypeError: auth.refreshToken(...).switchMap is not a function
".

在搜索找到的解决方案是添加管道,所以添加了

代码语言:javascript
运行
复制
 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;
            });

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

代码语言:javascript
运行
复制
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升级的问题,这将是什么修复呢?

修改后的进口

代码语言:javascript
运行
复制
import { switchMap } from "rxjs/operators"; to 
import 'rxjs/add/operator/switchMap'; 

现在,它给出了代码下面一节“error TS2304:无法找到名称‘switchMap’”的错误。

代码语言:javascript
运行
复制
 return this.tokenSubject.pipe(
                filter(token => token != null),
                take(1),
                switchMap(token => {
                    return next.handle(this.addToken(req));
                })
            );
EN

Stack Overflow用户

发布于 2018-07-09 14:00:51

快速解决方法是安装,旧代码不需要任何更改。然而,Rxjs 6对于第5版中引入的特性来说是更稳定的版本。因此,您将重新考虑文档,并将导入和rxjs使用的迁移到Rxjs 6。

代码语言:javascript
运行
复制
npm install --save rxjs-compat
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51243029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档