Pertama, saya sadar saya terlambat menjawab pertanyaan ini.
Sebelum membahas tentang sinkron dan asinkron, mari kita lihat secara singkat bagaimana program berjalan.
Dalam kasus sinkron , setiap pernyataan selesai sebelum pernyataan berikutnya dijalankan. Dalam hal ini program dievaluasi sesuai dengan urutan pernyataan.
Ini adalah cara kerja asinkron dalam JavaScript. Ada dua bagian dalam mesin JavaScript, satu bagian yang melihat kode dan operasi enqueues dan lainnya yang memproses antrian. Pemrosesan antrian terjadi dalam satu utas, itulah sebabnya mengapa hanya satu operasi yang dapat terjadi sekaligus.
Ketika operasi asinkron (seperti permintaan basis data kedua) terlihat, kode diuraikan dan operasi dimasukkan dalam antrian, tetapi dalam hal ini panggilan balik terdaftar untuk dijalankan ketika operasi ini selesai. Antrian mungkin sudah memiliki banyak operasi di dalamnya. Operasi di depan antrian diproses dan dihapus dari antrian. Setelah operasi untuk permintaan basis data diproses, permintaan dikirim ke basis data dan ketika selesai, panggilan balik akan dieksekusi setelah selesai. Pada saat ini, prosesor antrian yang telah "menangani" operasi bergerak pada operasi berikutnya - dalam hal ini
console.log("Hello World");
Permintaan basis data masih diproses, tetapi operasi console.log ada di depan antrian dan diproses. Ini menjadi operasi yang sinkron dijalankan segera menghasilkan output "Hello World". Beberapa waktu kemudian, operasi database selesai, hanya kemudian panggilan balik yang terdaftar dengan permintaan dipanggil dan diproses, mengatur nilai hasil variabel ke baris.
Ada kemungkinan bahwa satu operasi asinkron akan menghasilkan operasi asinkron lain, operasi kedua ini akan dimasukkan ke dalam antrian dan ketika sampai di depan antrian akan diproses. Memanggil panggilan balik yang terdaftar dengan operasi asinkron adalah cara JavaScript run time mengembalikan hasil operasi ketika selesai.
Metode sederhana untuk mengetahui operasi JavaScript mana yang tidak sinkron adalah untuk mencatat jika membutuhkan panggilan balik - panggilan balik adalah kode yang akan dieksekusi ketika operasi pertama selesai. Dalam dua contoh dalam pertanyaan, kita hanya dapat melihat kasus kedua memiliki panggilan balik, jadi ini adalah operasi asinkron dari keduanya. Ini tidak selalu terjadi karena berbagai gaya penanganan hasil operasi asinkron.
Untuk mempelajari lebih lanjut, baca tentang janji. Janji adalah cara lain di mana hasil dari operasi asinkron dapat ditangani. Yang menyenangkan tentang janji adalah bahwa gaya pengkodean terasa lebih seperti kode sinkron.
Banyak perpustakaan seperti simpul 'fs', menyediakan gaya sinkron dan asinkron untuk beberapa operasi. Dalam kasus di mana operasi tidak memakan waktu lama dan tidak banyak digunakan - seperti dalam kasus membaca file konfigurasi - operasi gaya sinkron akan menghasilkan kode yang lebih mudah dibaca.