Как я могу вызвать API, когда мое приложение закрывается - PullRequest
0 голосов
/ 16 мая 2019

Я хочу нажать API, чтобы установить последнее активное время пользователя. Но API не бьет. Поскольку API занимает время для инициализации и подключения к серверу, а до запуска API-интерфейса приложение закрывается

Я попробовал этот код в моем файле app.component.ts

    @HostListener('window:beforeunload', [ '$event' ])
      beforeUnloadHander(event) {
        this._apiService.setLastActive({time:new Date().getTime()/1000})
          .subscribe(data => {
          },err=> {
          })
      }

Кто-нибудь может подсказать, когда можно вызвать API для установки последнего активного статуса пользователя?

Ответы [ 3 ]

1 голос
/ 16 мая 2019

Пожалуйста, используйте ngOnDestroy() Внутри файла component.ts существующего компонента.

Особенности
Он очищается непосредственно перед тем, как Angular уничтожит директиву / компонент.Отмените подписку Observables и отсоедините обработчики событий, чтобы избежать утечек памяти и вызывать их непосредственно перед тем, как Angular уничтожит директиву / компонент. https://angular.io/guide/lifecycle-hooks

Если у вас есть несохраненные изменения.попробуйте этот ответ от stackoverflow Подтверждение перед закрытием вкладки / браузера

0 голосов
/ 16 мая 2019

Используйте код JavaScript, может быть, он будет работать для вас.

window.onbeforeunload = e => {
    e.returnValue = 'Do you really want to leave this site?';
    return dialogText;
};
0 голосов
/ 16 мая 2019

Только что натолкнулся на это: https://stackoverflow.com/a/54920520/982517. Похоже, что beforeunload не поддерживает асинхронность, поэтому вам придется использовать XMLHttpRequest для вызова вашего API.

Из другого поста:

window.addEventListener("beforeunload", function (event) {
  var client = new XMLHttpRequest();
  client.open("POST", "http://url/to/endsession", false); // third parameter indicates sync xhr
  client.setRequestHeader("Content-Type", "application/json");
  client.send('{userId: "42"}');
  console.log('done!!!'); // outputs when a response is received 
});
...