Tidak seperti bahasa pemrograman lainnya, JavaScript tidak memiliki metode sleep bawaan. Jadi Anda tidak bisa begitu saja memanggil fungsi sleep() untuk menjeda program Node.js. Namun, ada cara lain untuk membuat program menunggu waktu tertentu.
Tutorial ini membahas tiga pendekatan: setTimeout, async/await, dan paket sleep-promise.
Menggunakan setTimeout() untuk Menunggu Waktu Tertentu
Itu setWaktu habis() fungsi menjadwalkan kode untuk runtime untuk dieksekusi setelah jumlah waktu yang ditentukan telah berlalu. Ia menerima fungsi dan waktu tunda dalam milidetik. Berikut sintaksnya:
setWaktu habis(fungsi(), waktuInMs)
Misalnya, Anda memiliki fungsi yang dicetak di konsol:
fungsicetakKalimat() {
konsol.log("Menggunakan setTimeout()")
}
Untuk menjalankan fungsi di atas setelah dua detik berlalu, berikan fungsi dan waktu tunda 2000 ms ke setWaktu habis() fungsi:
setTimeout (printSentence, 2000)
Meskipun ini berfungsi, itu tidak menjamin fungsi Anda akan berjalan tepat setelah dua detik. Ini pasti akan memakan waktu setidaknya sebanyak itu, tetapi mungkin butuh lebih banyak.
Apakah setTimeout() Akurat?
Ya, tetapi dengan beberapa peringatan. setWaktu habis() adalah fungsi JavaScript asinkron yang berarti non-blocking. Kode yang Anda jadwalkan ditambahkan ke loop acara sementara sisa program Anda berlanjut.
Setelah waktu tunda berlalu, program Anda akan mengeksekusi kode terjadwal, tetapi hanya jika bebas untuk melakukannya. Jika kode lain ada di tumpukan panggilan, itu akan dieksekusi terlebih dahulu, bahkan jika kode terjadwal akan dijalankan. Di sinilah waktu tunda ekstra dapat terjadi, sehingga ketidakakuratan.
Perhatikan program berikut.
konsol.log("Halo Dunia!")
fungsicetakKalimat() {
konsol.log("Menggunakan setTimeout()")
}
setTimeout (printSentence, 2000)
konsol.log("Selesai")
Inilah yang akan ditampilkan konsol saat Anda menjalankannya:
Halo Dunia!
Selesai
Menggunakan setTimeout()
Program ini menyebabkan penundaan, tetapi hanya menunda kode yang diteruskan ke setWaktu habis(). Sisa program berlanjut, dengan kode terjadwal hanya menginterupsi setelah durasi berlalu. Jika Anda ingin menjalankan semua kode ini secara berurutan, dengan jeda di tengah, gunakan setWaktu habis() tidak akan bekerja.
Salah satu alternatifnya adalah menulis kode sinkron yang akan memblokir eksekusi selama yang Anda butuhkan. Misalnya, Anda dapat menggunakan lakukan... sementara loop untuk memblokir utas eksekusi hingga waktu tunda habis:
fungsimenunda(MS) {
konstan tanggal = Tanggal.sekarang();
membiarkan tanggal saat ini = batal;melakukan {
tanggal saat ini = Tanggal.sekarang();
} ketika (tanggal saat ini - tanggal < ms);
}
konsol.log("Halo Dunia");
penundaan (2000);
konsol.log("Akan dicetak setelah 2 detik!");
Itu menunda() fungsi loop sampai waktu saat ini sama dengan, atau lebih besar dari, waktu mulainya ditambah penundaan. Kelemahan dari pendekatan ini adalah CPU intensif, terutama dengan penundaan yang besar. Itu lakukan... while loop harus menghitung waktu yang tersisa setelah setiap milidetik.
Menggunakan Async/Await untuk Menunda Program Node.js
Sebuah menunggu ekspresi menyebabkan eksekusi berhenti sampai Janji diselesaikan. Ini memungkinkan Anda menjalankan kode asinkron seolah-olah itu sinkron, tetapi lebih efisien daripada dengan memblokir eksekusi secara manual. Anda hanya dapat menggunakan menunggu di dalam fungsi yang ditandai tidak sinkron.
fungsimenunda(waktu) {
kembalibaruJanji(menyelesaikan => setTimeout (menyelesaikan, waktu));
}tidak sinkronfungsicetakKalimat() {
konsol.log("Halo Dunia")
menunggu menunda(2000);
konsol.log("Akan dicetak setelah 2 detik");
}
printKalimat();
Ini adalah output dari program di atas:
Halo Dunia
Akan dicetak setelah 2 detik
Menggunakan Paket sleep-promise
Itu janji tidur package menyederhanakan proses menjeda program Node.js. Anda hanya perlu memanggilnya dan menentukan waktu tunda dalam milidetik.
Mulailah dengan menginstalnya melalui npm:
npm Installtidur-janji
Berikut adalah contoh bagaimana Anda dapat menggunakannya dalam program Anda:
konstan tidur = memerlukan('janji-tidur');
(tidak sinkron () => {
konsol.log("Halo Dunia.");
menunggu tidur(2000);
konsol.log("Akan dicetak setelah dua detik.");
})();
Saat program dijalankan, outputnya akan seperti berikut.
Halo Dunia.
Akan dicetak setelah dua detik.
Memilih Pendekatan yang Cocok
Menerapkan fungsi tidur di Node.js bisa jadi rumit. Saat memutuskan bagaimana melakukannya, pertimbangkan apa yang ingin Anda capai. Jika Anda hanya ingin menunda beberapa kode, untuk waktu yang minimum, setWaktu habis() adalah pilihan yang baik. Tetapi jika Anda ingin menjeda eksekusi seluruh program Anda, Anda harus menggunakan asinkron/menunggu.
Sinkron vs. Pemrograman Asinkron: Apa Perbedaannya?
Baca Selanjutnya
Topik-topik yang berkaitan
- Pemrograman
- Pengembangan web
- Pemrograman
- JavaScript
Tentang Penulis
Mary Gathoni adalah pengembang perangkat lunak dengan hasrat untuk membuat konten teknis yang tidak hanya informatif tetapi juga menarik. Ketika dia tidak coding atau menulis, dia senang bergaul dengan teman-teman dan berada di luar ruangan.
Berlangganan newsletter kami
Bergabunglah dengan buletin kami untuk kiat teknologi, ulasan, ebook gratis, dan penawaran eksklusif!
Klik di sini untuk berlangganan