Langsung ke konten utama

Javascript Promises


Pada kesempatan kali ini saya akan sedikit membahas tentang Javascript Promises yang saya kutip dari situs Google Developers tentang web dasar yaitu Javascript Promises: an introduction.

Javascript adalah pemrograman single threaded, yang berarti bahwa 2 bit script tidak dapat dijalankan secara bersamaan, script tersebut harus dijalankan satu demi satu. Di browser javascript membagi thread dengan hal-hal lain yang berbeda dari browser ke browser. Tapi biasanya javascript berada diantrian yang sama seperti painting/pelukisan, memperbarui gaya (CSS) dan penanganan tindakan pengguna (seperti menyoroti teks dan berinteraksi dengan kontrol form). Aktivitas di salah satu hal-hal ini dapat menunda aktivitas lain.

Anda Mungkin telah menggunakan event dan callback untuk hal-hal seperti ini. Berikut adalah contoh event
var img1 = document.querySelector('.img-1');

img1.addEventListener('load', function() {
// gambar telah dimuat
});

img1.addEventListener('error', function() {
// gagal
});

Sayangnya pada contoh diatas, ada kemungkinan bahwa event terjadi sebelum kita mulai mendengarkan event tersebut, namun kita dapat mengatasinya menggunakan property "complete" yang ada pada element img.
var img1 = document.querySelector('.img-1');

function loaded() {
// gambar telah dimuat
}

if (img1.complete) {
loaded();
}
else {
img1.addEventListener('load', loaded);
}

img1.addEventListener('error', function() {
// gagal
});
Cara ini tidak menangkap gambar yang error sebelum kita mendapat kesempatan untuk mendengarkannya; sayangnya DOM tidak memberi kita cara untuk melakukan itu. Juga, ini hanya memuat satu gambar, hal ini akan menjadi lebih rumit jika kita ingin tahu kapan serangkaian gambar telah dimuat.



Event tidak selalu menjadi cara yang terbaik


Event sangat baik untuk hal-hal yang dapat terjadi beberapa kali seperti objek-keyup, touchstart dll Dengan event-event tersebut Anda tidak perlu peduli tentang apa yang terjadi sebelum Anda mulai mendengarkan event. Tapi ketika kita berbicara tentang async keberhasilan / kegagalan, idealnya Anda ingin sesuatu seperti ini:

img1.panggilIniJikaTelahDimuatAtauSaatDimuat(function() {
// telah dimuat
}).AtauJikaGagalPanggilIni(function() {
// gagal
});

// and…
ketikaSemuaIniTelahDimuat([img1, img2]).panggilIni(function() {
// semua telah dimuat
}).atauJikaSalahSatuAtauLebihGagalPanggilIni(function() {
// salah satu atau lebih gagal
});

Ini adalah apa yang Promises dapat lakukan, tetapi dengan penamaan yang lebih baik. Jika elemen gambar HTML memiliki metode "ready" yang mengembalikan Promise, kita bisa melakukan ini:
img1.ready().then(function() {
// telah dimuat
}, function() {
// gagal
});

// dan…
Promise.all([img1.ready(), img2.ready()]).then(function() {
// semua telah dimuat
}, function() {
// satu atau lebih gagal
});

Pada dasarnya, Promise mirip seperti event listener namun:
  1. Sebuah Promise hanya dapat berhasil atau gagal sekali. Hal ini tidak dapat berhasil atau gagal dua kali, tidak bisa juga beralih dari berhasil ke gagal atau sebaliknya.
  2. Jika Promise telah berhasil atau gagal dan nanti Anda menambahkan callback keberhasilan / kegagalan, callback yang benar akan dipanggil, meskipun event telah berlangsung sebelumnya.

Terminologi Promise

Berikut adalah dasar-dasarnya.
Promise dapat:
terpenuhi - Jika tindakan yang berkaitan dengan Promise berhasil
ditolak - Jika tindakan yang berkaitan dengan Promise gagal
tertunda - Apakah belum terpenuhi atau ditolak
menetap - Telah dipenuhi atau ditolak
spesifikasinya juga menggunakan istilah thenable untuk menggambarkan obyek yang seperti Promise, dalam hal ini Promise memiliki metode then.

Referensi Promise API

Semua metode bekerja di Chrome, Opera, Firefox, Microsoft Edge, dan Safari kecuali dinyatakan berbeda. polyfill menyediakan beberapa metode di bawah ini untuk semua brower.

Metode-metode Static
Ringkasan Metode
Promise.resolve(promise) Pengembalian Promise (hanya jika promise.constructor == Promise)
Promise.resolve(thenable); Membuat Promise baru dari thenable tersebut. Sebuah thenable adalah Promise yang memiliki metode `then()`.
Promise.resolve(obj); Membuat Promise yang terpenuhi untuk obj. dalam kasus ini.
Promise.reject(obj); Membuat Promise yang menolak untuk obj. Untuk konsistensi dan debugging (mis stack trace), obj harus menjadi instanceof Error.
Promise.all(array); Membuat Promise yang terpenuhi ketika setiap item dalam array terpenuhi, dan menolak jika (dan ketika) item menolak. Setiap item array akan diteruskan ke Promise.resolve, sehingga array dapat menjadi campuran objek Promise dan objek-objek lainnya. Nilai pemenuhan adalah array (dalam urutan) dari nilai pemenuhan. Nilai penolakan adalah nilai penolakan pertama.
Promise.race(array); Membuat Promise yang terpenuhi setelah salah satu item terpenuhi, atau menolak setelah slah satu item apapun menolak, mana yang terjadi pertama kali.

Komentar

Postingan populer dari blog ini

Menagapa Pesawat Sering Terguncang?

Foto: Lion Air Ternyata peralihan atau berubahnya iklim dapat saja memperburuk turbulensi udara. Bagi Kamuyang melakukan perjalanan udara, hal ini tentu akan mengganggu kenyamanan perjalanan Anda. Seberapa buruk turbulensi ini? Cukup kuat sehingga dapat saja melempar penumpang dan awak pesawat di sekitar kabin jika tak memasang sabuk pengaman. Hal ini merupakan hasil studi dari Universitas Reading seperti dipublikasikan di Advances in Atmospheric Sciences , seperti ditulis Digital Trend . Menurut studi ini, makin buruknya kualitas udara memengaruhi pergerakan naik turun pesawat yang lebih kuat dari gravitasi. Para ahli percaya peralihan atau berubahnya iklim membuat fenomena ini lebih sering dua tiga kali dari yang terjadi saat ini. Dengan demikian, berjalan di pesawat, meminta layanan makanan, atau bahkan memegang sesuatu menjadi lebih sulit dilakukan. Studi ini menyebutkan bahwa turbulensi ringan akan meningkat 59 persen. Turbulensi ringan hingga menengah meningkat 75 persen, Pada sp...

Dua Waktu Yang Dilarang Oleh Rasulullah SAW Untuk Tidur

Tidur menjadi sesuatu yang esensi dalam kehidupan kita. Karena dengan tidur, kita menjadi segar kembali. Tubuh yang lelah, urat-urat yang mengerut, dan otot-otot yang dipakai beraktivitas seharian, bisa meremaja lagi dengan melakukan tidur. Dalam Islam, semua perbuatan bisa menjadi ibadah. Begitu pula tidur, seperti yang dicontohkan oleh Rasulullah saw. Dalam Al-Quran, Allah swt pun menyuruh kita untuk tidur. Namun, ternyata ada dua waktu tidur yang dianjurkan oleh Rasulullah untuk tidak dilakukan. 1. Tidur di Pagi Hari Setelah Shalat Shubuh Dari Sakhr bin Wadi’ah Al-Ghamidi radliyallaahu ‘anhu bahwasannya Nabi shallallaahu ‘alaihi wasallam bersabda : ”Ya Allah, berkahilah bagi ummatku pada pagi harinya” (HR. Abu dawud 3/517, Ibnu Majah 2/752, Ath-Thayalisi halaman 175, dan Ibnu Hibban 7/122 dengan sanad shahih). Ibnul-Qayyim telah berkata tentang keutamaan awal hari dan makruhnya menyia-nyiakan waktu dengan tidur, dimana beliau berkata : “Termasuk hal yang makruh bagi mereka – yaitu o...

Cara Setting Redirect http ke https di Blogspot

Redirect http ke https Meskipun google sudah menyediakan fasilitas untuk mengaktifkan fitur https pada blogspot, namun sepertinya URL https belum bisa secara otomatis berjalan, ketika ada pengunjung blog Kamu menemukan blog Kamu dihasil pencarian google, maka tetap mereka akan di arahkan ke alamat blog Kamu yang mengunakan HTTP. Kita tidak tahu sampai kapan ini akan terus berlangsung, kemungkinan besar hanya tinggal menunggu waktu saja sepertinya karena Kita yakin pada akhirnya akan nanti akan menggunakan default https. Jika Kamu menghendaki untuk menggunakan https Kamu bisa melakukan redirect langsung menjadi https, sehingga ketika pengunjung blog Kamu mengakses situs Kamu maka akan langsung diarahkan menjadi https. Caranya Kamu bisa menggunakan script khusus, dengan langkah-langkah sebagai berikut: 1. Masuk ke akun blogspot Kamu, 2. Pada menu sisi kiri pilih menu template, kemudian klik tombol edit HTML, untuk masuk ke editor html template Kamu 3. Silahkan cari kode dan silahkan pil...