Penulis catatan itu, terjemahan yang kami terbitkan hari ini, mengatakan bahwa ia sulit menahan diri untuk tidak menyebutnya "Akhirnya - kesempatan yang ditunggu semua orang," atau entah bagaimana bercanda tentang topik ini. Pada akhirnya, ia memutuskan untuk melakukannya tanpa bercanda dan hanya berbicara tentang fitur yang sangat penting dan berguna dari benda-benda Janji.
Jika Anda baru mulai mempelajari JavaScript dan tidak terlalu akrab dengan janji (kadang-kadang disebut "janji", "hasil yang dijanjikan", "benda yang dijanjikan"), maka Anda mungkin tertarik dengan publikasi kami sebelumnya tentang topik ini:
โ
Janji dalam ES6: pola dan anti-polaโ
JavaScript: metode pemrograman tidak sinkronโ
JavaScript ES8 dan transisi ke async / tungguโ
Async / tunggu: 6 alasan untuk melupakan janjiโ
Melarikan diri dari Neraka async / menungguโ
JavaScript ES6: menulis lebih sedikit - berbuat lebih banyakโ
Panduan Janji bagi mereka yang ingin menyelesaikannyaโ
JavaScript async / tunggu desain: kekuatan, jebakan, dan pola penggunaanโ
Menggunakan Janji dalam JavaScriptPromise.prototype. Akhirnya Metode
Klausa
25.6.5.3 dari ECMAScript 2018 standar didedikasikan untuk
metode Promise.prototype.finally Menurut
caniuse.com , level dukungan untuk metode ini adalah sekitar 81%. Metode ini juga dapat digunakan di Node.js.
Metode janji
finally
adalah salah satu inovasi paling penting dari standar, yang memungkinkan Anda untuk menentukan fungsi yang akan dieksekusi terlepas dari hasil janji. Fungsi seperti itu akan terpenuhi jika janji berhasil diselesaikan dan jika ditolak.
Pertimbangkan sebuah contoh:
const myPromise = new Promise((resolve, reject) => { setTimeout(() => { resolve('success!!!'); }, 2000); });
Ini adalah janji yang sangat umum yang diselesaikan setelah 2000 milidetik. Jika setelah itu kita perlu melakukan beberapa tindakan, kita perlu blokir
then
:
myPromise.then( result => { console.log(result) }, failMessage => { console.log(failMessage) } );
Dua fungsi anonim diteruskan ke metode itu. Yang pertama akan dieksekusi jika janji berhasil diselesaikan. Yang kedua adalah ketika ditolak. Janji kami selalu berhasil diselesaikan, pesan
success!!!
akan selalu ditampilkan di konsol
success!!!
. Semua ini sangat baik, tetapi bagaimana jika perlu bahwa tindakan tertentu dilakukan setelah penolakan janji, dan setelah berhasil menyelesaikan pekerjaannya? Di sini metode yang
finally
akan membantu kita:
const myPromise = new Promise((resolve, reject) => { setTimeout(() => { resolve('success!!!'); }, 2000); }); myPromise.then( result => { console.log(result) }, failMessage => { console.log(failMessage) } ).finally(finallyMessage => { console.log('FINALLY!!')});
Terlepas dari bagaimana janji itu menyelesaikan pekerjaannya, di samping pesan yang sesuai, teks
FINALLY!!
, yang memberitahu kita bahwa fungsi callback yang diteruskan ke metode
finally
berfungsi. Untuk memverifikasi ini - Anda dapat melakukan
percobaan .
Ringkasan
Fakta bahwa metode Promise.prototype.finally muncul di ES2018 menunjukkan bahwa di masa mendatang kita dapat mengharapkan tingkat dukungan browser yang sangat tinggi. Ini berarti bahwa apa yang sebelumnya Anda harus gunakan alat bantu yang dibuat oleh pengembang pihak ketiga sekarang dapat diimplementasikan menggunakan alat standar.
Dalam situasi apa metode
Promise.prototype.finally
berguna? Misalnya - jika, ketika Anda memulai Janji yang digunakan untuk mengunduh sesuatu, beberapa animasi mulai diputar, pada
finally
Anda dapat menyelesaikan animasi ini. Di blok
finally
, Anda bisa, misalnya, menutup jendela modal tertentu. Bahkan, ada banyak situasi di mana metode yang
finally
mungkin berguna.
Pembaca yang budiman! Sudahkah Anda menggunakan pengganti untuk metode yang akhirnya dijanjikan sebelum penerapan standarnya?
