Burada biraz farklı bir cevap vereceğim: Evet, hem tryve hem de finallyblok çalıştırılır ve finallybir 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
tryve finallybloğunuz bu işlevi şu şekilde yürütecektir:
try {
return res.send('try');
} catch(e) {
} finally {
return res.send('finally');
}
Bu kod, dizeyi trytarayı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) returndeğerleri sadece işlev kapsamlarıyla ilişkilendiriyorum .
Imho, en iyi bahsiniz asla returnbir finallyblok 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 finallyiçin kullanıyorsun?
finallySadece 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ı finallyolduğunuzda, tryveya 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 returniçinde tryve catchonun yerine.