订阅模式已弃用

问题描述 投票:0回答:3

使用 intellij for Angular IDE 向我展示以下建议:

deprecated 
Observable<LoginResult>.subscribe(     
next?: (value: LoginResult) => void,     
error?: (error: any) => void,     
complete?: () => void): 
Subscription

Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments
 
rxjs

在此订阅。

the advice

    this.loginService.login(request)
      .subscribe(
        next => (data: LoginResult) => {
        if (this.authService.setToken(data.tokenType, data.accessToken)) {
          localStorage.setItem('eMail', request.email)
          this.router.navigate(['/dashboard']);
        }
      }, error => {
        alert(error.error.message)
      });

有人知道在这种情况下使用订阅的正确方法吗? 谢谢!

目前我认为我们不会更新 Angular,但将来我们不想重写每个订阅:D

angular deprecated
3个回答
1
投票

使用

next
/
error
键将订阅参数设置为对象:

this.loginService.login(request)
  .subscribe({
    next: (data: LoginResult) => {
      if (this.authService.setToken(data.tokenType, data.accessToken)) {
        localStorage.setItem('eMail', request.email)
        this.router.navigate(['/dashboard']);
      }
    }, 
    error: error => {
      alert(error.error.message)
    });
  });

0
投票

subscribe
并未被弃用,只是您正在使用的变体被弃用。

试试这个:

this.loginService.login(request)
  .subscribe({
    next => (data: LoginResult) => {
    if (this.authService.setToken(data.tokenType, data.accessToken)) {
      localStorage.setItem('eMail', request.email)
      this.router.navigate(['/dashboard']);
    }
  }, error => {
    alert(error.error.message)
  }});

subscribe
只会接受一个参数,那就是观察者。 https://rxjs.dev/deprecations/subscribe-arguments


0
投票

让我们更改您的代码以使用不同的

subscribe(...)
重载:

this.loginService.login(request).subscribe({
    next: (data: LoginResult) => {
        if (this.authService.setToken(data.tokenType, data.accessToken)) {
            localStorage.setItem('eMail', request.email)
            this.router.navigate(['/dashboard']);
        }
    },
    error: error => {
        alert(error.error.message)
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.