Menggunakan Promise Pada Proses Async

Lesson ini akan membahas menggunakan promise pada proses Async . Ide dari Promises adalah sebuah promise untuk menampilkan result dari sebuah operasi asynchronous.

Mengapa perlu melakukan proses asynchronous? Jika kita bekerja dengan IO, menggunakan metode synchronous akan terjadi blocking. Oleh karena itu agar aplikasi responsive, maka perlu menggunakan metode asynchronous.

Note: Promises sudah built-in secara native di nodejs versi 4.0. Untuk browser modern sudah support juga, jika belum support maka kita perlu menjalankan promise lewat promisejs.org (lihat include script pada code ke-2).

Fungsi asyncMethod dibawah akan sulit dibaca jika code cukup besar. Pada program dibawah tidak terlihat rumit karena code sangat sederhana, tanpa proses apapaun dan tidak melakukan error handling.

Berikut contoh async method tanpa menggunakan Promises.

<html>
<head>
  <title>Lesson Promises</title>
  <script src="app.js"></script>
</head>
<body>
  <p>nothing important goes here</p>
</body>
</html>

//app.js
function asyncMethod(message, cb){
  setTimeout(function(){
    console.log(message);
    cb();
  }, 500);
}

asyncMethod('Opend DB Conn', function(){
  asyncMethod('Find user', function(){
    asyncMethod('Validate user', function(){
      asyncMethod('do something', function(){});
    });
  });
});

Berikut contoh penulisan asynchronous dengan menggunakan Promises. Jika browser sudah support Promises, bagian include script dari promisejs.org bisa dibuang.

<html>
<head>
  <title>Lesson Promises</title>
  <!-- Jika browser tidak support masukan bagian ini -->
  <script src="https://www.promisejs.org/polyfills/promise-7.0.4.min.js"></script>
  <script src="app2.js"></script>
</head>
<body>
  <p>nothing important goes here</p>
</body>
</html>

//app2.js
function asyncMethod(message){
    return new Promise(function (fulfill, reject){
      setTimeout(function(){
        console.log(message);
        fulfill();
      }, 500);
    });
  }
  
  function findUser(){
    return asyncMethod('Find User');
  }
  
  function validateUser(){
    return asyncMethod('Validate User');
  }
  
  function doSomething(){
    return asyncMethod('Do Something');
  }
  
  asyncMethod('Open DB Conn')
    .then(findUser)
    .then(validateUser)
    .then(doSomething)
    .then(function(){});

Kesimpulan

Seperti pada lesson sebelumnya, menggunakan named function adalah best practice. Dengan menggunakan promise, code akan terlihat lebih clean, mudah dibaca dan dipahami.

Sharing is caring: