Angular 5 - вызов службы REST API на странице / закрытии вкладки перед загрузкой окна - PullRequest
0 голосов
/ 27 февраля 2019

В моем приложении Angular 5 я должен сделать http-запрос на закрытие страницы, чтобы снять блокировку в базе данных базы данных.Я пытался добавить код в качестве HostListener для окна: beforeunload.Однако он не ожидает завершения асинхронного http-вызова. Другой синхронный код, кажется, выполняется нормально.Есть ли способ сделать http синхронным или есть другие варианты сделать то же самое?Любая помощь по этому вопросу высоко ценится.

@HostListener('window:beforeunload', ['$event'])
     beforeUnloadHander(event) {
        event.preventDefault();

    let closeEventobj = this.form.formConfig.Events.find(((event) => event.Type === 'PageClose'));
            this.customEventHandler(closeEventobj);
    }


customEventHandler(Event: EventConfig):Observable<any> {
           this.ds.postFormdata(apipath, JSON.stringify(this.data)).subscribe(
                 response => {
                     console.log(response);
                 },
                 err => {
                 console.log(error)
                 });

}

ОБНОВЛЕНИЕ - я смог решить эту проблему с помощью XMLHttpRequest () напрямую.Смотрите ниже код, который работал для меня.Третий параметр в xhr.open для асинхронности, являющейся ложным.Недостатком этого метода является использование HTTPInterceptors для добавления заголовков при каждом запросе.Я должен сделать эту часть вручную, так как они добавляются только к угловым запросам httpclient, а не к запросам XMLHTTP.Даже при том, что это работает, я хотел бы видеть, есть ли угловое решение для этого.

customEventHandler(Event: EventConfig){
            let xhr = new XMLHttpRequest()
            xhr.open("POST", this.apipath, false);
            xhr.setRequestHeader('Content-Type', 'application/json');
            xhr.send(JSON.stringify(this.data));
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...