Так себе решение.
А если на сервере запор, а в сети пробки, и за секунду ответ не пришел?
Опять ошибка будет.
Так попробуйте
function getCookie(name) {
let matches = document.cookie.match(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
}
function closeListener (tbeg) {
const closeButton = document.querySelector(".fancybox-close")
if (closeButton) {
closeButton.addEventListener("click", function() {
if ('modalwin' in window) {
modalwin.style.display = "none";
}
// записываем cookie на 1 день, с которой мы не показываем окно
let date = new Date;
date.setDate(date.getDate() + 1);
document.cookie = "mcookie=no; path=/; expires=" + date.toUTCString();
});
} else {
if (Date.now() - tbeg > 8000) {
console.error('Сервер не отвечает')
return;
}
setTimeout (closeListener, 100, tbeg);
}
}
document.addEventListener('DOMContentLoaded', function() {
let mcookie = getCookie("mcookie");
if (mcookie != "no") {
setTimeout(function() {
showModal("obratnyij-zvonok/");
closeListener(Date.now())
}, 15000);
}
});