Синхронный запрос через fetch
Да, знаю, плохо, отвратительно и всё такое. Но иногда нужно. Например мне понадобилось при написании Service Worker, для возможности подмены запрашиваемого для загрузки url.. Реализовал так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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(); } |