Saya telah menggunakan fitur ECMAScript 6 dan ECMAScript 7 (berkat Babel) di aplikasi saya - baik seluler maupun web.
Langkah pertama yang jelas adalah ECMAScript 6 level. Saya belajar banyak pola async, promise (yang benar-benar menjanjikan), generator (tidak yakin mengapa simbol *), dll. Dari semua ini, promise cukup sesuai untuk tujuan saya. Dan saya sudah cukup sering menggunakannya dalam aplikasi saya.
Berikut adalah contoh / pseudocode tentang bagaimana saya menerapkan janji dasar-
var myPromise = new Promise(
function (resolve,reject) {
var x = MyDataStore(myObj);
resolve(x);
});
myPromise.then(
function (x) {
init(x);
});
Seiring berjalannya waktu, saya menemukan fitur ECMAScript 7, dan salah satunya adalah ASYNC
dan AWAIT
kata kunci / fungsi. Ini dalam hubungannya melakukan keajaiban besar. Saya sudah mulai mengganti beberapa janji saya dengan async & await
. Mereka tampaknya memberi nilai tambah yang besar pada gaya pemrograman.
Sekali lagi, berikut adalah pseudocode tentang bagaimana fungsi async, await saya terlihat-
async function myAsyncFunction (myObj) {
var x = new MyDataStore(myObj);
return await x.init();
}
var returnVal = await myAsyncFunction(obj);
Mengesampingkan kesalahan sintaks (jika ada), keduanya melakukan hal yang persis sama adalah apa yang saya rasakan. Saya hampir bisa mengganti sebagian besar janji saya dengan async, tunggu.
Mengapa async, menunggu diperlukan saat promise melakukan pekerjaan serupa?
Apakah asinkron, menunggu menyelesaikan masalah yang lebih besar? Atau apakah itu hanya solusi berbeda untuk menelepon balik neraka?
Seperti yang saya katakan sebelumnya, saya dapat menggunakan promise dan async, menunggu untuk menyelesaikan masalah yang sama. Apakah ada hal khusus yang menunggu penyelesaian async?
Catatan tambahan:
Saya telah menggunakan async, menunggu dan janji dalam proyek React dan modul Node.js saya secara ekstensif. React khususnya telah menjadi yang pertama dan mengadopsi banyak fitur ECMAScript 6 dan ECMAScript 7.
sumber
Jawaban:
async/await
hanya memberi Anda nuansa sinkron ke kode asinkron. Ini adalah bentuk gula sintaksis yang sangat elegan.Untuk kueri sederhana dan manipulasi data, Promises bisa jadi sederhana, tetapi jika Anda mengalami skenario di mana ada manipulasi data yang kompleks dan yang tidak terlibat, lebih mudah untuk memahami apa yang terjadi jika kode hanya terlihat seolah-olah sinkron (dengan kata lain, sintaks itu sendiri adalah suatu bentuk "kompleksitas insidental" yang
async/await
dapat disiasati).Jika Anda tertarik untuk mengetahuinya, Anda dapat menggunakan library like
co
(bersama generator) untuk memberikan kesan yang sama. Hal-hal seperti ini telah dikembangkan untuk memecahkan masalah yangasync/await
akhirnya terpecahkan (secara native).sumber
Async / Await menyediakan sintaks yang jauh lebih baik dalam skenario yang lebih kompleks. Secara khusus, apa pun yang berhubungan dengan loop atau konstruksi tertentu lainnya seperti
try
/catch
.Sebagai contoh:
Contoh ini akan jauh lebih berbelit-belit hanya dengan menggunakan Promises.
sumber
const getValue = value => value || operation1().then(operation2).then(getValue);
Hal pertama yang harus Anda pahami bahwa
async
/await
sintaks hanyalah gula sintaksis yang dimaksudkan untuk menambah janji. Faktanya, nilai kembali dari suatuasync
fungsi adalah sebuah janji.async
/await
syntax memberi kita kemungkinan untuk menulis asynchronous secara sinkron. Berikut ini contohnya:Perangkaian janji:
Async
fungsi:Dalam contoh di atas,
await
menunggu promise (fetch(url)
) diselesaikan atau ditolak. Jika promise diselesaikan, nilainya disimpan dalamresponse
variabel, dan jika promise ditolak, hal itu akan menimbulkan kesalahan dan karenanya memasukicatch
blok.Kita sudah bisa melihat bahwa menggunakan
async
/await
mungkin lebih mudah dibaca daripada rantai janji. Ini terutama benar ketika jumlah janji yang kita gunakan meningkat. Baik rantai janji danasync
/await
memecahkan masalah neraka panggilan balik dan metode mana yang Anda pilih adalah masalah preferensi pribadi.sumber
Perbandingan penuh dengan pro dan kontra.
JavaScript biasa
Asinkron (pustaka)
Janji
Generator
Async menunggu
sumber
Async / await dapat membantu membuat kode Anda lebih bersih dan lebih mudah dibaca jika Anda memerlukan aliran kontrol yang rumit. Ini juga menghasilkan kode yang lebih ramah debug. Dan memungkinkan untuk menangani kesalahan sinkron dan asinkron hanya dengan
try/catch
.Saya baru-baru ini menulis posting ini yang menunjukkan keuntungan dari async / await over promise dalam beberapa kasus penggunaan umum dengan contoh kode: 6 Alasan Mengapa JavaScript Async / Await Blows Promises Away (Tutorial)
sumber