Saya akan memberikan jawaban yang sedikit berbeda di sini: Ya, blok try
dan finally
dieksekusi, dan finally
lebih diutamakan daripada nilai "pengembalian" sebenarnya untuk suatu fungsi. Namun, nilai kembali ini tidak selalu digunakan dalam kode Anda.
Inilah alasannya:
- Contoh di bawah ini akan menggunakan
res.send()
dari Express.js, yang membuat respons HTTP dan mengirimkannya.
- Anda
try
dan finally
blok keduanya akan menjalankan fungsi ini seperti:
try {
return res.send('try');
} catch(e) {
} finally {
return res.send('finally');
}
Kode ini akan menampilkan string try
di browser Anda. JUGA, contoh akan menunjukkan kesalahan di konsol Anda. The res.send()
fungsi disebut dua kali . Ini akan terjadi dengan apa pun yang merupakan fungsi. Blok coba-tangkap-akhirnya akan mengaburkan fakta ini ke mata yang tidak terlatih, karena (secara pribadi) saya hanya mengaitkan return
nilai dengan lingkup fungsi.
Taruhan terbaik Anda adalah tidak pernah menggunakan return
di dalam finally
blok . Ini akan memperumit kode Anda dan berpotensi menutupi kesalahan.
Faktanya, ada pengaturan aturan inspeksi kode default di PHPStorm yang memberikan "Peringatan" untuk ini:
https://www.jetbrains.com/help/phpstorm/javascript-and-typescript-return-inside-finally-block.html
Jadi apa yang kamu gunakan finally
?
Saya akan menggunakan finally
hanya untuk membersihkan barang-barang. Apa pun yang tidak penting untuk nilai kembalian suatu fungsi.
Mungkin masuk akal jika Anda memikirkannya, karena saat Anda bergantung pada baris kode di bawah finally
, Anda berasumsi bahwa mungkin ada kesalahan dalam try
atau catch
. Tapi 2 yang terakhir itu adalah blok bangunan penanganan error yang sebenarnya. Cukup gunakan return
dalam try
dan catch
sebagai gantinya.