Синхронный запрос через fetch
Да, знаю, плохо, отвратительно и всё такое. Но иногда нужно. Например мне понадобилось при написании Service Worker, для возможности подмены запрашиваемого для загрузки url.. Реализовал так:
self.addEventListener('fetch', (event) => {
console.log('Запрашиваем URL: '+event.request.url);
(async () => {
res=await postData("woodpecker.php", { "url": event.request.url});
})();
console.log("--получили ответ");
if (res.error===false){
console.log("Отдаём URL");
if ( event.request.url.endsWith( '.png' ) ) {
return event.respondWith(
fetch( 'm.jpg' )
);
}
} else {
return event;
};
});
async function postData(url = "", data = {}) {
console.log("-отправляем в "+url);
// Default options are marked with *
const response = await fetch(url, {
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/x-www-form-urlencoded',
},
body: "data="+JSON.stringify(data),
});
return await response.json();
}