Konuyu Açan
#1
Bir isteğe zaman aşımı koymak kolay; asıl merak ettiğim, iptal sinyalini işin bütün aşamalarında gerçekten etkili kılmanın en temiz yolu ne? Örneğin gelen HTTP isteği iptal edildiğinde dış servise yapılan fetch’i ve ardından çalışan stream işlemini de durdurmak istiyorum. Yalnızca fetch’e sinyal vermek, sonrasında CPU yoğun bir dönüşüm veya başka bir asenkron iş sürüyorsa yeterli olmayabiliyor.
Benim anladığım kadarıyla, ortak bir AbortSignal’ı alt fonksiyonlara geçirmek iptal davranışını görünür ve tutarlı kılıyor. Stream tarafında da
Ama burada iki noktadan emin değilim:
Üretimde, özellikle fetch ile stream’i birlikte kullandığınız bir yapıda iptal sinyalini nasıl yayıyorsunuz? Kaçırdığım önemli bir kenar durumu var mı?
Benim anladığım kadarıyla, ortak bir AbortSignal’ı alt fonksiyonlara geçirmek iptal davranışını görünür ve tutarlı kılıyor. Stream tarafında da
stream/promises içindeki pipeline sinyal seçeneği bu akışa dahil edilebiliyor. Kabaca:KOD
12345
async function aktar(url, signal) {
const yanit = await fetch(url, { signal });
await pipeline(yanit.body, hedefStream, { signal });
}
Ama burada iki noktadan emin değilim:
- İstemci bağlantısı kapanınca gelen isteğin sinyalini uygulama koduna aktarmak için kullandığınız güvenilir bir yöntem var mı?
- Sinyal iptal edildiğinde her alt işlem aynı hatayı mı üretmeli, yoksa bazı iptalleri beklenen durum olarak ele alıp loglamamak mı daha doğru?
Üretimde, özellikle fetch ile stream’i birlikte kullandığınız bir yapıda iptal sinyalini nasıl yayıyorsunuz? Kaçırdığım önemli bir kenar durumu var mı?