Future dengan async-await

 Pada materi sebelumnya kita telah mempelajari Future untuk berurusan dengan proses asynchronous. Seperti yang kita tahu, penulisan kode asynchronous akan sedikit berbeda dengan proses synchronous. Contohnya program pesan kopi kita sebelumnya jika dituliskan secara asynchronous akan seperti berikut:

2020033111050081b9f735708c1036c2bbb0892ab68b38.jpeg

Dart memiliki keyword async dan await yang merupakan sebuah alternatif supaya kita bisa menuliskan proses asynchronous layaknya proses synchronous. Bagaimana caranya?

Dengan gaya penulisan synchronous, kira-kira kode program pesan kopi kita akan seperti berikut:

  1. void main() {
  2.   print('Getting your order...');
  3.   var order = getOrder();
  4.   print('You order: $order');
  5. }

Namun ketika kode di atas dijalankan hasilnya tidak akan sesuai yang kita harapkan karena fungsi getOrder() merupakan objek Future.

Getting your order...
You order: Instance of 'Future<String>'

Output ini disebabkan karena fungsi main() masih merupakan fungsi synchronous. Untuk mengubahnya menjadi fungsi asynchronous tambahkan keyword async sebelum function body.

  1. void main() async { }

Kemudian tambahkan keyword await sebelum fungsi yang mengembalikan nilai Future.

  1. var order = await getOrder();

Dari perubahan di atas yang memanfaatkan async-await kita telah berhasil menuliskan proses asynchronous dengan gaya synchronous.

Lalu bagaimana menangani ketika terjadi eror? Caranya cukup sederhana yaitu dengan memanfaatkan try-catch:

Begitu juga seperti yang telah disebutkan, method whenComplete() bisa digantikan dengan blok finally. Sehingga keseluruhan kode akan menjadi seperti berikut:

20200331110937ec96183151b69f4e8243f18fb7a5516d.jpeg

Anda dapat mengunjungi tautan berikut jika ingin melihat sumber dari keseluruhan interactive code di atas.

Selain itu, untuk memperdalam materi terkait Future dengan async-await, Anda dapat membaca beberapa tautan berikut.