ES2018 - metode akhirnya menjanjikan

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 JavaScript

Promise.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?

Source: https://habr.com/ru/post/id427405/


All Articles