В моем приложении 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));
}