Saya akan memberikan jawaban yang sedikit berbeda di sini: Ya, blok trydan finallydieksekusi, dan finallylebih 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
trydan finallyblok keduanya akan menjalankan fungsi ini seperti:
try {
return res.send('try');
} catch(e) {
} finally {
return res.send('finally');
}
Kode ini akan menampilkan string trydi 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 returnnilai dengan lingkup fungsi.
Taruhan terbaik Anda adalah tidak pernah menggunakan returndi dalam finallyblok . 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 tryatau catch. Tapi 2 yang terakhir itu adalah blok bangunan penanganan error yang sebenarnya. Cukup gunakan returndalam trydan catchsebagai gantinya.