Как сделать обработчик Angular app @HostListener ('window: unload', ['$ event']), чтобы завершить sh все задачи перед выходом? - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь сделать 2 http-запроса, но они на самом деле не выполняются, хотя шаг отладки указывает на то, что вызван httpclient.delete. выполнение никогда не останавливается в точке останова внутри подписки.

app.component.ts

@HostListener('window:unload', ['$event'])
  unloadHandler() {

    this.tabService.closeMainWindow();
  }

tab-manager.service.ts

  closeMainWindow(): void {
    if (this.windowId === this.sessionId) {
      this.closeWindows();
      this.logout().subscribe(
        () => this.initCache.emptyCache(),
        err => console.error('Deleting plan session resulted in error', err));
    }
  }


private logout() {
    const ses = this.ngRedux.getState().planning.planSession;
    if (ses !== null) {
      return this.httpClient.delete<IPlanSession>(`${this.url}/${ses.id}`).pipe(
        concatMap(() => this.httpClient.post('api/v1/auth/logout', null).pipe(
          tap(() => this.tokenService.logout()))));
    }
    return this.httoClient.post('api/v1/auth/logout', null).pipe(
      tap(() => this.tokenService.logout()));
  }

РЕДАКТИРОВАТЬ: Здесь вопрос с такой же проблемой. Однако для angular5 она устарела и реального решения не существует.

1 Ответ

0 голосов
/ 19 марта 2020

вы можете попробовать вот так

private logout() {
return new Promise(resolve => {
 const ses = this.ngRedux.getState().planning.planSession;
    if (ses !== null) {
      return this.httpClient.delete<IPlanSession>(`${this.url}/${ses.id}`).pipe(
        concatMap(() => this.httpClient.post('api/v1/auth/logout', null).pipe().subscribe(response => {
this.tokenService.logout()
});
    }
    return this.httoClient.post('api/v1/auth/logout', null).pipe().subscribe(response => {
this.tokenService.logout();
resolve(true);
});
});
  }

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