Şimdi istediğin 2 şey var:
- 1.si eğer x saniye içinde istek attığın yer cevap dönmezse isteği iptal etmek istiyorsun.
Bunun için fetch'de AbortController
sınıfını kullanabilirsin.
- 2.si ise eğer timeout olursa bunu yakalamak ve buna göre bir işlem yapmak istiyorsun.
Bunun içinde Promise.race
metodunu kullanabilirsin. Bunun içine verdiğin promise'lerden hangisi önce sözünü tutarsa onu döndürüyor. Bu mantıkta fetch zaten promise, senin 2. bir promise yazman lazım bu arkadaşta 5 saniye sonra reject olacak bir promise olacak. Böylece eğer 5 sn uzun süren bir isteğin varsa yazdığın 2. promise sözünü tutacağı için timeout olduğunu anlayacaksın.
Gelelim kodlara:
function fetchWithTimeoutAndAbort(url, timeout = 5000) {
const controller = new AbortController();
const signal = controller.signal;
// Zaman aşımı için bir promise oluştur
const timeoutPromise = new Promise((_, reject) => {
const timeoutId = setTimeout(() => {
controller.abort(); // Zaman aşımında isteği iptal et
reject(new Error('Request timed out and was aborted'));
}, timeout);
});
// Fetch isteği ve zaman aşımı promise'ını yarıştır
return Promise.race([
fetch(url, { signal }).then(response => {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.status; // her sey okey ise status'u dondur
}),
timeoutPromise
]);
}
kullanırken ise:
fetchWithTimeoutAndAbort('https://hedefsite.com', 5000)
.then(data => console.log(data)) // Başarılı yanıtı işle
.catch(error => {
if (error.name === 'AbortError') {
console.error('Fetch request was aborted due to timeout');
} else {
console.error('Fetch error:', error);
}
});
Güncelleme
Son çıkanlara baktığımda AbortSignal: timeout()
diye bir şey varmış, yani teknik olarak şöyle de kısaltılabilir:
fetch('https://hedefsite.com', { AbortSignal.timeout(5000) })
.then(res => console.log(res))
.catch(err => console.log(err))
@ebykdrms'de dedigi gibi, artik str_replace'de 2. parametrede null
kullanimi kaldirildi, onun yerine bos string olarak degistirirsen problemin cozulecektir.
kisaca projendeki butun su sekilde olan kodlarini:
str_replace($needle, null, $haystack)
soyle degistirmen gerekiyor:
str_replace($needle, '', $haystack)
Gecen PHP'nin yeni surumune gecerken ben de ayni problemi yasadim, uzucu :D eger 3. parti kullandigin class'lar vs. varsa onlarda hata cikarabilir, onlara da bir el atman gerekebilir.
bir div icine alip o div'e class verebilirsin, diger turlu hesaplamayi yapabilmek icin override eziyor sanirim proplari :/
buyur abi ihtiyacin olan regex:
^(?!0\.0[0-9]$)(?!0$)\d+(\.\d{2})?$
En dusuk 0.10'dan başlamasını sağlar, 0 ya da 0.00 ya da 0.01 ... 0.09 bu degerleri kabul etmez.
Bununla ilgili surada bir issue acilmis, cozumu ise:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
bir sunucu uzerinden calistirmaniz gerekiyor olabilir, eger istek vs. atiyorsaniz bir yerlere cors hatasi veriyor boyle actiginizda.
pwa olabilir mi dediginiz sey? zamaninda bir video hazirlamistim bununla ilgili, belki yardimci olur:
https://www.youtube.com/watch?v=I-ptHZ9oUq4
https://facebook.com
gibi olmali yonlendirme linki, eger facebook.com
gibi olursa kabul etmez domain icinde yonlendirmeye calisir.
id yoktur, cunku slug dinamik yani "kaleseramik" degerini sorguda aratiyor, id'yi gostermiyor, dolayisi ile unique slug'lari bilmiyorsan bulman da mumkun degil
burada senin vaktinin degeri onemli olan, karsi taraf bunu kabul eder/etmez ayri mesele ancak 1 ay surecek bir proje icin kendi 1 aylik masraflarini goz onune alacaksin en basta, diyelim ki 1 ayda 100k senin icin ideal, sonra projeye bakacaksin gercekten 1 ay suruyor mu bu proje yoksa ben mi uzatiyorum diye, eger 15 gun surecekse 50k'ya anlasmayi deneyeceksin -5/+5 olabilir tabi karsidakinin iyi niyetine gore ama isi yaptirmak isteyen ve ozellikle sana gelmis birileri bunu olumlu degerlendirecektir. Ha tabi baktin adamin parasi var, 100k lik ise 300k dersen o da senin ac gozlulugun olur :) Yani hakettigin kadari her zaman idealdir, bu bana gore 100k olabilirken sana gore 10k olabilir, o yuzden bunu kendi hayatina gore endeksleyip karar vermen gerekiyor, yetkinlik, tecrube, isin detaylari vs. her sey bir etkendir, 10k'ya cikacak is ile 100k'ya cikacak is genelde ayni olmamakla birlikte bazen 10k'lik is 100k'lik isten daha iyi ciktigi zamanlarda olmustur, bana gore olcut budur :)