Angular 11:subscribe已被弃用:改用观察者?

19

我的tslint疯了吗?它为我在整个应用程序中进行的每个订阅都给出警告。无论我使用旧语法还是新语法,它都会提示subscribe已被弃用...如何编写一个不会过时的subscription?

这是今天之前一直没问题的:

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: () => {}
      });

这就是它所说的:

(方法) Observable.subscribe(next?: (value: Object) => void, error?: (error: any) => void, complete?: () => void): Subscription (+4 overloads) @deprecated — 使用观察者(observer)代替完成回调函数

@deprecated — 使用观察者(observer)代替错误回调函数

@deprecated — 使用观察者(observer)代替完成回调函数

subscribe已被弃用: 使用观察者(observer)代替完成回调函数(deprecation)tslint(1)

那么现在如何订阅(subscribe)事物呢?


尝试在错误和完成回调中放置虚拟控制台,似乎是与这些键的空回调有关的问题。许多人都面临过这个问题。 - Beshambher Chaukhwan
这个回答解决了你的问题吗?Subscribe已被弃用:使用观察者代替错误回调 - mbojko
@mbojko,您刚才提供的链接与另一个问题有关。 - Fabian Schmidt
3个回答

17

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

❗重要提示:已经弃用TSLint,推荐使用ESLint。

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

干杯!


1
这个答案太棒了!当涉及到VS Code中的错误时,这个方法可以解决所有问题。移除TSLint扩展并安装ESLint扩展。 - Mike R
如果您通过npm卸载/安装进行此操作,请确保重新启动VSCode以使更改生效。 - Craig

12
回答你的问题“那么我现在该如何订阅呢”: https://rxjs-dev.firebaseapp.com/guide/observer 这就是答案。它易于使用,并且与以前做的相似,只有一个小变化,它实际上现在接受一个具有 3 个键(next、error、complete)的对象(观察者)。 我们两天前在工作中也进行了同样的讨论,尽管可以/应该使用观察者,但弃用似乎是一个虚假警报。(我们认为我们必须更改约900个订阅): 这是关于此问题在 rxjs github 页面上创建的一个问题: https://github.com/ReactiveX/rxjs/issues/6060 开发人员说这是由于 TypeScript 中的一个 bug: https://github.com/microsoft/TypeScript/issues/43053 这个 bug 已经在三天前修复了,但我不确定它是否已经包含在最新的版本中: https://github.com/microsoft/TypeScript/pull/43165

呼,我理解这个问题是与VSCode/TSLint有关的,很可能会很快得到解决? - Smokovsky
这正是情况。 - Fabian Schmidt

6

更好的解决方案

myObservable.subscribe({
    next: (val) => { ... },
    error: (err) => { ... },
    complete: () => { ... }     
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接