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

时间:2020-03-18 15:02:35

标签: javascript angular typescript http post

我写了一个登录方法,该方法将http帖子发送到授权服务。如果凭据错误,则服务将返回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);
        }
      },
      () => {
      },
  );
  }
async login(): Promise<void> {
  this.authService.login(this.username, this.password)
      .then( () => console.log("SUCCESS!"))
      .catch(() => console.log("ERROR!"));
}

我已经尝试将authService.login调用包装在Try / Catch中,并使用await进行调用

await this.authService.login(this.username, this.password)

并且根本不运行代码异步。

谢谢您的任何建议。

编辑: 如果我正确地理解了您,则无需返回包装在Promise中的错误,并且/或者会导致问题。我必须承认,我不太了解订阅会创建一个Observable。

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

我尝试直接抛出错误,结果相同。

0 个答案:

没有答案