Использование Promise.reject () для обработки ошибок в http.post - PullRequest
0 голосов
/ 18 марта 2020

Я написал метод входа в систему, который отправляет сообщение 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)

и вообще не запуская код asyn c.

Спасибо за любые советы заранее.

Редактировать: Если я вас правильно понимаю, возвращать ошибку, завернутую в обещание, не нужно и / или может вызвать проблемы. Я должен признать, что я действительно не понимал, что подписка создаст Observable.

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

Я попытался сгенерировать ошибку напрямую с тем же результатом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...