Promise JavaScript
- Halaman Sebelumnya JS Asinkron
- Halaman Berikutnya JS Async
"Saya janjikan hasil!"
"Producing code (kode produksi)" adalah kode yang memerlukan waktu
"Consuming code (kode konsumsi)" adalah kode yang harus menunggu hasil
Promise adalah objek JavaScript yang menghubungkan kode produksi dan kode konsumsi
Objek Promise JavaScript
Objek Promise JavaScript mengandung kode produksi dan pemanggilan kode konsumsi:
Sintaks Promise
let myPromise = new Promise(function(myResolve, myReject) { // "Producing Code" (dapat memerlukan waktu) myResolve(); // saat berhasil myReject(); // saat terjadi kesalahan }); // "Consuming Code" (harus menunggu janji yang diterima) myPromise.then( function(value) { /* Kode saat berhasil */ }, function(error) { /* Kode saat terjadi kesalahan */ } );
Ketika eksekusi kode mendapatkan hasil, ia harus memanggil salah satu kembalian dua:
Hasil | Panggil |
---|---|
Berhasil | myResolve(nilai hasil) |
Terjadi kesalahan | myReject(objek error) |
Atribut objek Promise
Objek Promise JavaScript dapat menjadi:
- Menunggu
- Diterima
- Diterima
Objek Promise mendukung dua atribut:state dan result。
Ketika objek Promise "menunggu" (berkerja), hasilnya adalah tidak terdefinisi。
Ketika objek Promise "diterima", hasilnya adalah nilai.
Ketika objek Promise adalah "diterima", hasilnya adalah objek error。
myPromise.state | myPromise.result |
---|---|
"menunggu" | Tidak terdefinisi |
"diterima" | Nilai hasil |
"diterima" | Objek error |
Anda tidak dapat mengakses atribut Promise state dan result。
Anda harus menggunakan metode Promise untuk menangani Promise。
Bagaimana cara menggunakan Promise
Berikut adalah cara penggunaan Promise:
myPromise.then( function(value) { /* kode jika sukses */ }, function(error) { /* kode jika ada kesalahan */ } );
Promise.then() memiliki dua parameter, yaitu callback sukses dan callback gagal.
Kedua-duanya adalah opsi, jadi Anda dapat menambahkan callback untuk sukses atau gagal.
Contoh
function myDisplayer(some) { document.getElementById("demo").innerHTML = some; } let myPromise = new Promise(function(myResolve, myReject) { let x = 0; // Buat kode (ini mungkin memerlukan waktu sebelumnya) if (x == 0) { myResolve("OK"); } else { myReject("Error"); } }); myPromise.then( function(value) {myDisplayer(value);}, function(error) {myDisplayer(error);} );
Contoh JavaScript Promise
Untuk menunjukkan penggunaan Promise, kita akan menggunakan contoh callback di bab sebelumnya:
- Tunggu timeout
- Tunggu file
Tunggu timeout
Contoh penggunaan callback
setTimeout(function() { myFunction("Saya Cinta Kamu !!!"); }, 3000); function myFunction(value) { document.getElementById("demo").innerHTML = value; }
Contoh penggunaan Promise
let myPromise = new Promise(function(myResolve, myReject) { setTimeout(function() { myResolve("Saya Cinta Kamu !!"); }, 3000); }); myPromise.then(function(value) { document.getElementById("demo").innerHTML = value; });
Tunggu file
Contoh penggunaan callback
function getFile(myCallback) { let req = new XMLHttpRequest(); req.open('GET', "mycar.html"); req.onload = function() { if (req.status == 200) { myCallback(req.responseText); } else { myCallback("Error: " + req.status); } } req.send(); } getFile(myDisplayer);
Contoh penggunaan Promise
let myPromise = new Promise(function(myResolve, myReject) { let req = new XMLHttpRequest(); req.open('GET', "mycar.htm"); req.onload = function() { if (req.status == 200) { myResolve(req.response); } else { myReject("File not Found"); } }; req.send(); }); myPromise.then( function(value) {myDisplayer(value);}, function(error) {myDisplayer(error);} );
Dukungan Browser
ECMAScript 2015, disebut juga ES6, memperkenalkan object Promise di JavaScript.
Tabel di bawah ini menunjukkan versi browser yang mendukung object Promise penuh:
Chrome | IE | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 33 | Edge 12 | Firefox 29 | Safari 7.1 | Opera 20 |
Februari 2014 | Juli 2015 | April 2014 | September 2014 | Maret 2014 |
- Halaman Sebelumnya JS Asinkron
- Halaman Berikutnya JS Async