Burada biraz farklı bir cevap vereceğim: Evet, hem try
ve hem de finally
blok çalıştırılır ve finally
bir işlev için gerçek "dönüş" değerinden önceliklidir. Ancak, bu dönüş değerleri her zaman kodunuzda kullanılmaz.
İşte nedeni:
- Aşağıdaki örnek
res.send()
, bir HTTP yanıtı oluşturan ve onu gönderen Express.js'yi kullanacaktır .
- Sizin
try
ve finally
bloğunuz bu işlevi şu şekilde yürütecektir:
try {
return res.send('try');
} catch(e) {
} finally {
return res.send('finally');
}
Bu kod, dizeyi try
tarayıcınızda gösterecektir . AYRICA, örnek konsolunuzda bir hata gösterecektir. res.send()
Fonksiyon denir iki kez . Bu, bir işlev olan her şeyde olur. Dene-yakala-nihayet bloğu bu gerçeği eğitimsiz bir göze gizleyecektir, çünkü (kişisel olarak) return
değerleri sadece işlev kapsamlarıyla ilişkilendiriyorum .
Imho, en iyi bahsiniz asla return
bir finally
blok içinde kullanmamaktır . Kodunuzu aşırı karmaşık hale getirecek ve potansiyel olarak hataları maskeleyecektir.
Aslında, PHPStorm'da bunun için bir "Uyarı" veren varsayılan bir kod inceleme kuralı vardır:
https://www.jetbrains.com/help/phpstorm/javascript-and-typescript-return-inside-finally-block.html
Peki ne finally
için kullanıyorsun?
finally
Sadece eşyaları temizlemek için kullanırdım . Bir işlevin dönüş değeri için kritik olmayan herhangi bir şey.
Düşünürseniz mantıklı olabilir, çünkü altındaki bir kod satırına bağlı finally
olduğunuzda, try
veya içinde hatalar olabileceğini varsayarsınız catch
. Ancak son 2, hata işlemenin gerçek yapı taşlarıdır. Sadece bir kullanmak return
içinde try
ve catch
onun yerine.