Dipublikasikan: 17 Januari 2025
Melakukan pekerjaan asinkron di web bisa jadi sulit—dan banyak hal yang dilakukan di web melibatkan asinkronitas. Baik itu melibatkan panggilan fetch
atau operasi asinkron lainnya, cara Anda melakukan pekerjaan tersebut akan dipermudah oleh browser saat metode bawaan memberikan penanganan error yang andal. Hal ini telah disediakan untuk Promise menggunakan metode then
, catch
, dan finally
.
Meskipun demikian, cara Anda merancang codebase aplikasi harus fleksibel, dan tidak semua yang akan Anda lakukan di aplikasi harus asinkron. Terkadang, Anda mungkin ingin menangani hasil callback dengan cara yang lebih sederhana jika tidak masalah apakah callback yang Anda teruskan ke Promise
bersifat sinkron atau tidak. Promise.try
adalah metode yang kini tersedia di semua mesin browser utama yang menyederhanakan hal ini bagi developer, yang berarti bahwa metode ini kini tersedia di Dasar Pengukuran Baru.
Apa yang dimaksud dengan Promise.try
dan bagaimana cara kerjanya?
Promise.try
adalah metode praktis yang mempermudah penanganan error untuk fungsi callback sinkron daripada jika Anda menggunakan Promise.resolve
:
// If the callback is synchronous and it throws
// an exception, the error won't be caught here:
new Promise(resolve => resolve(callback());
// But it will be here:
Promise.try(callback);
Kemudian, menggunakan metode then
, catch
, dan finally
, tangani penyelesaian atau penolakan Promise
:
Promise.try(callback)
.then(result => console.log(result))
.catch(error => console.log(error))
.finally(() => console.log("All settled."));
Bagaimana jika fungsi callback Anda memiliki argumen? Anda dapat menangani hal ini dengan salah satu dari dua cara berikut:
// This creates an extra closure, but works:
Promise.try(() => callback(param1, param2));
// This doesn't create an extra closure, and still works:
Promise.try(callback, param1, param2);
Manfaat utama penggunaan Promise.try
adalah memungkinkan Anda menggunakan Promise secara seragam, terlepas dari apakah callback yang Anda teruskan ke Promise tersebut bersifat sinkron atau asinkron. Artinya, dalam kasus fungsi utilitas yang meneruskan callback ke Promise
yang banyak digunakan dalam kode Anda, penggunaan Promise.try
akan memastikan penanganan error yang tepat untuk callback apa pun yang Anda teruskan ke fungsi tersebut. Untuk informasi tambahan dan potensi masalah atau kasus penggunaan lainnya, lihat dokumentasi MDN untuk Promise.try
.
Kesimpulan
Setelah Promise.try
mencapai Dasar Pengukuran Baru tersedia, Anda seharusnya dapat menggunakannya di semua mesin browser utama. Seiring waktu, Anda akan dapat menggunakan Promise.try
di aplikasi web dengan keyakinan yang semakin meningkat bahwa Promise.try
akan menjadi bagian yang stabil dan interoperabilitas dari platform web.