JavaScript (JS) terkenal dengan gaya asinkronnya dibandingkan dengan bahasa lain yang awalnya diakomodasi menggunakan callback. Terutama pada node. js yang hampir semua API inti adalah async. Namun callback itu sendiri terkadang kurang nyaman digunakan karena bisa menyebabkan callback hell, sulit untuk melakukan error handling, dll Show
Contoh callback sih, misalkan ada 4 file, A. txt, B. txt, C. txt, D. txt di direktori yang sama dan ingin membuka 4 file secara berurutan dengan callback const fs = require('fs');fs.readFile('A.txt', 'utf8', (errA, resA) => { Seiring dengan berkembangnya komunitas, fitur, dan standar dari JS itu sendiri, banyak library yang mencoba menyederhanakan proses async dengan membuat API yang lebih sederhana dan atau lebih “rich” (kaya fitur), seperti library async, ketika, dan masih banyak lagi. Salah satu pendekatan paling sederhana adalah dengan menggunakan Janji, hingga beberapa proposal Janji diajukan sebagai standar di CommonJS (Janji A, B, KISS, D) dan pada akhirnya spesifikasi Janji A+ digunakan oleh standar (ES6). Tidak diragukan lagi, JS adalah bahasa tercepat untuk berubah setidaknya sampai tulisan ini dibuat Promise API cenderung lebih mudah dan nyaman digunakan, asalkan kita memahami konsep scope dan async di JS. Berikut ini akan dibahas beberapa contoh penggunaan Promises Membuat Janji ObyekSebelum mencoba hal berikut, pastikan Promise tersedia di lingkungan global. Simpul pengguna. js dapat langsung menggunakan Janji sejak versi stabil 0. 12. x, sedangkan untuk sisi client (browser) bisa merujuk ke. Jika env yang digunakan tidak support Promise, kita bisa menggunakan polyfill atau library tambahan lainnya seperti bluebird const fs = require('fs');// contoh promise untuk async_ Promise Konstruktor menerima satu argumen dalam bentuk fungsi yang menerima dua argumen yang biasa disebut penyelesaian dan penolakan. Semua argumen adalah fungsi layak panggilan balik. Proses yang terjadi dalam lingkup Promise dapat berupa asinkron atau sinkronisasi. Sehingga Promise sering digunakan sebagai standarisasi API, sehingga tidak perlu mengubah API saat mengubah dari proses sync ke async. Perlu diingat, eksekusi proses yang terjadi pada promise dilakukan langsung pada saat promise dibuat Memanfaatkan API “lalu” dan “tangkap”.Objek Promise memiliki metode/fungsi then dan catch, yang masing-masing memiliki fungsi untuk memproses hasil keberhasilan dan kegagalan const fs = require('fs');const promiseA = new Promise((resolve, reject) => { Dalam contoh di atas log "hasil A. ” dan “hasil dari B. ” akan muncul tetapi “File results. " tidak, karena promiseFail sengaja dibuat error yaitu membaca file yang tidak ada, maka akan muncul log "error" yang meng-capture hasil error dari promiseFail Pemrosesan Banyak JanjiSetelah memahami contoh dasar, selanjutnya akan dibahas contoh chaining yang memproses data dari lebih dari satu promise Asumsikan pada 3 janji yang kita miliki, kita ingin membaca semua file, pada akhirnya semua hasil dirilis terlepas dari berhasil atau gagalnya // variable outside promise scope Variabel dideklarasikan di luar lingkup janji. Selama janji belum selesai, variabel akan tetap nol, termasuk di baris terakhir (di luar cakupan janji). Perhatikan bahwa "catch" adalah sebelum yang terakhir "then", maksudnya adalah, pertama-tama kita mengatur semua kesalahan yang terjadi dari janji-janji yang telah dieksekusi, dan pada bagian terakhir, kita harus bisa mengantisipasi jika salah satu atau lebih hasilnya masih nihil karena proses async gagal. Penanganan kesalahan semacam ini jauh lebih nyaman dan mudah diterapkan daripada panggilan balik Skenario kedua, asumsikan kita membutuhkan hasil dari semua janji, tetapi jika ada kesalahan di salah satunya, hasilnya adalah string "kesalahan", bukan nol // Id error, write string 'error' instead of null_ Salah satu kemudahan menggunakan promise adalah penanganan error yang lebih rapi dan dapat diprediksi. Pada contoh di atas, pengkodean dapat dipersingkat dan disederhanakan menjadi sebagai berikut (tanpa mengurangi fungsionalitas sedikitpun) // Id error, write string 'error' instead of null Lekukan dapat disesuaikan dengan kebutuhan. Pada contoh penulisan di atas, akan sangat mudah untuk melakukan debug, yang janji akan menangani kesalahan, serta urutan prosesnya Memanfaatkan Promise API. semuaBeberapa janji dapat dijalankan secara berurutan seperti contoh sebelumnya tetapi juga dapat dijalankan secara paralel menggunakan Promise API. semua 'use strict';const fs = require('fs');const promiseA = new Promise((resolve, reject) => {_ Beberapa ciri yang perlu diperhatikan
Jadi, Janji. all kurang cocok untuk mengeksekusi promise yang membutuhkan penanganan error atau akurasi pada setiap promise yang ada Tapi kita bisa melakukan kesalahan penyerahan janji yang dijalankan pada Janji. semua, sehingga tidak ada kesalahan yang tertangkap. Contohnya adalah sebagai berikut 'use strict';const fs = require('fs');const promiseA = new Promise((resolve, reject) => { Pada contoh diatas, “result E” akan berisi undefined, karena pada saat melakukan proses penanganan error, kita tidak mengembalikan apapun Chainning dan Penanganan Kesalahan pada JanjiPada contoh sebelumnya, sedikit dibahas masalah error handling. Berikut adalah contoh implementasi penanganan error dengan beberapa pendekatan. Selain penanganan error, ada juga contoh penggunaan variasi chaining pada API then dan catch 'use strict';const fs = require('fs');const promise = new Promise((resolve, reject) => {_ Contoh di atas menunjukkan bahwa pengembalian dalam janji akan dilanjutkan ke rantai berikutnya dan pengembalian dapat mengubah proses sinkronisasi // 2. editing success result with async process _Dalam contoh di atas, proses pengembalian janji bisa menjadi janji lain. Tapi ingat, jika pengembaliannya berupa janji, untuk mendapatkan hasilnya perlu dieksekusi setelah "kemudian" (menunggu hingga proses selesai hingga "aman" untuk sinkronisasi dan async) const fs = require('fs');// contoh promise untuk async_0 Pada contoh di atas, promiseB dimodifikasi terlebih dahulu dengan hasil promise (A) secara internal. Sehingga tidak diperlukan variabel eksternal const fs = require('fs');// contoh promise untuk async_1 Pada contoh di atas penanganan error dilakukan secara internal pada sebuah proses promise besar yaitu promise A sebagai awal proses Demikian beberapa ciri dari chaining promise(s) antara lain
Buat Janji Objek InstanTerkadang kita membutuhkan sebuah nilai yang saat ini prosesnya bisa dilakukan secara sinkron, namun kedepannya ada kemungkinan proses tersebut akan dilakukan secara async, maka standarisasi dengan promise sangat cocok untuk kasus tersebut. Namun, menghasilkan janji objek menggunakan "Janji baru..." dalam proses sinkronisasi tidaklah efisien. Dalam contoh berikutnya, dibahas cara membuat objek promise menggunakan Promise API. menyelesaikan dan berjanji. menolak const fs = require('fs');// contoh promise untuk async_2 Dalam contoh di atas "Janji. resolve()" di awal dilakukan hanya untuk memberikan ruang lingkup awal tanpa hasil apa pun, sehingga proses janji selanjutnya dapat ditulis dengan rapi Janji. penyelesaian adalah objek instan yang dapat diteruskan ke "kemudian" saat Janji. reject adalah objek instan yang diteruskan ke "catch". Dalam hal API tidak ada ketentuan berapa nilai yang harus dikembalikan oleh Promise. menolak, tetapi ada baiknya kita mengikuti standar error di JS, yaitu return error adalah error objek yang dibuat dengan "New Error" (atau turunannya) KesimpulanJanji dapat membantu "menjinakkan" proses asinkron di JS. Terlebih lagi, promise sudah menjadi standar di ECMA 2015 (ES6), sehingga developer bisa lebih nyaman menggunakan fitur dari promise untuk kebutuhan produksi. Walaupun masih ada kemungkinan spesifikasi standar akan berubah, mengingat bahasa JS berubah dengan sangat cepat Seluruh kode sumber dari artikel ini dapat diakses secara terbuka di repositori https. //github. com/hallowin/blog-promise Apa itu Janji dalam javascript?Janji adalah salah satu fitur penting ES6 . Objek janji mewakili solusi atau kesalahan pada operasi Asinkron.
Kapan kita menggunakan asinkron?Proses asinkron sering digunakan untuk komunikasi data , karena data adalah bagian inti dari aplikasi, konsep asinkron sangat penting untuk memahami.
Apa itu async Tunggu Javascript?Async/await adalah fitur yang hadir sejak ES2017. Fitur ini memudahkan kita menangani proses asinkron . Async/Await adalah sintaks khusus yang digunakan untuk menangani Janji sehingga penulisan kode lebih efisien dan rapi.
Apa itu fungsi callback javascript?Callback dalam Javascript adalah fungsi yang dikirim sebagai parameter ke fungsi lain. Fungsi di atas adalah contoh callback yang berjalan sinkron karena callback fungsi langsung dieksekusi pada proses fungsional yang bersifat sinkron. |