Angular 11:不推荐使用订阅:改用观察者?

Posted

技术标签:

【中文标题】Angular 11:不推荐使用订阅:改用观察者?【英文标题】:Angular 11: subscribe is deprecated: Use an observer instead? 【发布时间】:2021-06-10 18:17:00 【问题描述】:

我的 tslint 疯了?它会为我在整个应用程序中所做的每个订阅发出警告。不管我使用旧语法还是新语法,它仍然说订阅已被弃用...如何编写不会被弃用的订阅?

直到今天都这样:

something.subscribe((user: User) => 
        this.userProviderService.setUserId(user.userId);
        this.proceed = true;
      );

我尝试了新的语法,但没有改变:

something.subscribe(
        next: (user: User) =>  
          this.userProviderService.setUserId(user.userId);
          this.proceed = true;
        ,
        complete: () => ,
        error: () => 
      );

这正是它所说的:

(method) Observable.subscribe(next?: (value: Object) => void, 错误?:(错误:任何)=> void,完成?:()=> void):订阅(+4 重载)@deprecated — 使用观察者而不是完整的 回调

@deprecated — 使用观察者而不是错误回调

@deprecated — 使用观察者而不是完整的回调

subscribe 已弃用:使用观察者而不是完整的 回调(弃用)tslint(1)

那么我现在如何订阅?

【问题讨论】:

尝试将虚拟控制台置于错误状态并完成回调,这似乎是这些键的空回调的问题。很多人都遇到过这个问题 这能回答你的问题吗? Subscribe is deprecated: Use an observer instead of an error callback @mbojko 您刚刚链接的内容与另一个问题有关 【参考方案1】:

我刚刚在 VS Code 扩展选项卡中查找了 TSLint (v1.3.3)。它说:

❗重要提示:TSLint 已被弃用,取而代之的是 ESLint。

由于我禁用了 TSLint 并安装了 ESLint,所有与订阅相关的警告都消失了。

干杯!

【讨论】:

支持这个答案!当涉及到 VS Code 中的错误时,这解决了一切。删除 TSLint 扩展并安装 ESLint 扩展。 如果你是通过 npm 卸载/安装来做的,请务必重启 VSCode 以使更改生效。【参考方案2】:

要回答您的问题“那么我现在如何订阅内容”: https://rxjs-dev.firebaseapp.com/guide/observer 就是这个。它易于使用,并且与之前所做的非常相似,只是做了一点小改动,现在它实际上接受了一个具有 3 个键的对象(观察者):next、error、complete。

我们在 2 天前的工作中进行了同样的讨论,尽管您可以/应该使用观察者,但弃用似乎是一种虚惊。 (我们认为我们必须更改约 900 个订阅):

这是在 rxjs github 页面上创建的关于此问题的问题:https://github.com/ReactiveX/rxjs/issues/6060

开发人员在其中说这是由于打字稿错误:https://github.com/microsoft/TypeScript/issues/43053

这个错误已经在 3 天前修复了,我不确定它是否已经在最新版本中:

https://github.com/microsoft/TypeScript/pull/43165

【讨论】:

Pheew :D 据我了解:这是一种 vscode/tslint 问题,可能很快就会得到解决? 就是这样【参考方案3】:

我遇到了同样的问题,我通过使用更清楚的方式解决了它。

.subscribe(
    complete: () =>  ... ,
    error: () =>  ... ,    
    next: () =>  ...      
);

我在 Angular v13 中遇到过这个问题,并使用上面的代码解决了这个问题。

【讨论】:

以上是关于Angular 11:不推荐使用订阅:改用观察者?的主要内容,如果未能解决你的问题,请参考以下文章

Angular RxJS入门笔记 (Observable可观察对象Subscribe订阅Observer观察者Subscription对象)

订阅可观察到的Angular 8组件中的问题

Angular 2:可观察订阅未正确读取数据[重复]

在 Angular 中链接可观察订阅的最佳方式?

“对象”类型上不存在属性“”。可观察订阅

submitForm 上的 Angular 2 RxJS 可观察取消订阅