Javascript 在http.post中使用Promise.reject()进行错误处理

Javascript 在http.post中使用Promise.reject()进行错误处理,javascript,angular,typescript,http,post,Javascript,Angular,Typescript,Http,Post,我编写了一个登录方法,它向授权服务发送http post。如果凭据错误,服务将返回403 我的想法是返回一个Promise.reject()并让调用方捕获拒绝以显示警报。我的问题是,调用方法不能正确处理错误 我的错误程序有什么地方做错了吗 public async login(username: string, password: string): Promise<void> { let authToken = null; const obj = this; const

我编写了一个登录方法,它向授权服务发送http post。如果凭据错误,服务将返回403


我的想法是返回一个Promise.reject()并让调用方捕获拒绝以显示警报。我的问题是,调用方法不能正确处理错误

我的错误程序有什么地方做错了吗

public async login(username: string, password: string): Promise<void> {
  let authToken = null;
  const obj = this;
  const url = this.backendService.getAuthServiceURL(username, password);
  this.http.post<any>(url, { }, {
    headers: new HttpHeaders(),
    observe: 'response',
  }).subscribe(
      (result) => {
        authToken = result.headers.get('Authorization');
        localStorage.setItem(authTokenIdentifier, authToken);
        obj.username = username;
        localStorage.setItem(usernameIdentifier, username);
      },
      (error) => {
        if (error.status === 403) {
          localStorage.removeItem(authTokenIdentifier);
          return Promise.reject(error.message);
        } else {
          return Promise.reject(error.message);
        }
      },
      () => {
      },
  );
  }
并且根本不异步运行代码

谢谢你事先提出的任何建议

编辑: 如果我理解正确,返回包含在承诺中的错误是不必要的,并且/或者可能导致问题。我必须承认,我真的不明白subscribe会创建一个可观察的

  (error) => {
        if (error.status === 403) {
          localStorage.removeItem(authTokenIdentifier);
          throwError(error.message);
        } else {
          throwError(error.message);
        }
      },

我试图直接抛出错误,但结果相同

你将可观察到的东西包装在承诺中有什么原因吗?我强烈建议不要将承诺包装在可观察到的东西中,这会导致你所看到的意外结果。如果您愿意,您可以通过rxjs observable上的
.toPromise()
将observable转换为承诺。“我的想法是返回一个承诺。拒绝()”-但观察者是链的末端。返回值(如果有的话)不会被任何人使用。很抱歉再次挖掘它,我没有太多时间来处理它。你们谁能看看我的更新吗?非常感谢。
await this.authService.login(this.username, this.password)
  (error) => {
        if (error.status === 403) {
          localStorage.removeItem(authTokenIdentifier);
          throwError(error.message);
        } else {
          throwError(error.message);
        }
      },