Apakah ada metode JavaScript yang mirip dengan jQuery delay()
atau wait()
(untuk menunda eksekusi skrip untuk jangka waktu tertentu)?
javascript
settimeout
Niyaz
sumber
sumber
function_reference
kecuali jika Anda menyertakan()
. Yaitufunction_reference
hanya itu - referensi; lewatfunction_reference()
akan segera memanggil fungsi.Hanya untuk menambahkan apa yang dikatakan orang lain tentang
setTimeout
: Jika Anda ingin memanggil fungsi dengan parameter di masa depan, Anda perlu mengatur beberapa panggilan fungsi anonim.Anda harus melewati fungsi sebagai argumen untuk dipanggil nanti. Akibatnya ini berarti tanpa tanda kurung di belakang nama. Berikut ini akan memanggil lansiran sekaligus, dan itu akan menampilkan 'Halo dunia':
Untuk memperbaikinya, Anda dapat meletakkan nama fungsi (seperti yang dilakukan Flubba) atau Anda dapat menggunakan fungsi anonim. Jika Anda harus melewati parameter, maka Anda harus menggunakan fungsi anonim.
Tetapi jika Anda menjalankan kode itu, Anda akan melihat bahwa setelah 2 detik popup akan mengatakan 'Hello Stack Overflow'. Ini karena nilai variabel a telah berubah dalam dua detik tersebut. Untuk membuatnya mengatakan 'Halo dunia' setelah dua detik, Anda perlu menggunakan cuplikan kode berikut:
Ini akan menunggu 2 detik dan kemudian muncul 'Hello world'.
sumber
Hanya untuk sedikit memperluas ... Anda dapat mengeksekusi kode secara langsung dalam
setTimeout
panggilan, tetapi seperti yang dikatakan @patrick , Anda biasanya menetapkan fungsi panggilan balik, seperti ini. Waktunya milidetiksumber
Jika Anda benar-benar ingin memiliki fungsi pemblokiran (sinkron)
delay
(untuk apa pun), mengapa tidak melakukan sesuatu seperti ini:sumber
delay
(untuk menjawab pertanyaan ini ). Apakah ada cara untuk melakukannya?Anda perlu menggunakan setTimeout dan memberikannya fungsi panggilan balik. Alasan Anda tidak dapat menggunakan sleep dalam javascript adalah karena Anda akan memblokir seluruh halaman dari melakukan sesuatu sementara itu. Bukan rencana yang bagus. Gunakan model acara Javascript dan tetap senang. Jangan melawannya!
sumber
Anda juga dapat menggunakan window.setInterval () untuk menjalankan beberapa kode berulang kali pada interval reguler.
sumber
setTimeout()
lakukan sekali,setInterval()
lakukan berulang kali. Jika Anda ingin kode Anda berjalan setiap 5 detik,setInterval()
dibuat untuk pekerjaan itu.Untuk menambahkan komentar sebelumnya, saya ingin mengatakan yang berikut:
The
setTimeout()
fungsi dalam JavaScript tidak berhenti eksekusi script per se, tetapi hanya memberitahu compiler untuk menjalankan suatu kode di masa depan.Tidak ada fungsi yang benar-benar dapat menghentikan sementara eksekusi ke dalam JavaScript. Namun, Anda dapat menulis fungsi Anda sendiri yang melakukan sesuatu seperti loop tanpa syarat hingga waktu tercapai dengan menggunakan
Date()
fungsi dan menambahkan interval waktu yang Anda butuhkan.sumber
Jika Anda hanya perlu menguji penundaan, Anda dapat menggunakan ini:
Dan kemudian jika Anda ingin menunda selama 2 detik Anda lakukan:
Mungkin bukan yang terbaik untuk produksi. Lebih lanjut tentang itu di komentar
sumber
mengapa Anda tidak bisa meletakkan kode di belakang janji? (diketik di bagian atas kepala saya)
sumber
Jawaban sederhana adalah:
Fungsi di atas menunggu 1 detik (1000 ms) kemudian menetapkan x ke 1. Jelas ini adalah contoh; Anda dapat melakukan apa pun yang Anda inginkan di dalam fungsi anonim.
sumber
Saya benar-benar menyukai penjelasan Maurius (respons terunggul tertinggi) dengan tiga metode berbeda untuk menelepon
setTimeout
.Dalam kode saya, saya ingin secara otomatis menavigasi ke halaman sebelumnya setelah menyelesaikan acara penyimpanan AJAX. Penyelesaian acara simpan memiliki sedikit animasi di CSS yang menunjukkan bahwa penyimpanan berhasil.
Dalam kode saya, saya menemukan perbedaan antara dua contoh pertama:
Yang ini tidak menunggu batas waktu - bagian belakang () dipanggil segera tidak peduli berapa pun nomor yang saya tunda.
Namun, ubah ini menjadi:
Ini tepat seperti yang saya harapkan.
Ini tidak spesifik untuk operasi back (), sama terjadi dengan
alert()
. Pada dasarnya dengan yangalert()
digunakan dalam kasus pertama, waktu tunda diabaikan. Ketika saya mengabaikan popup, animasi untuk CSS berlanjut.Jadi, saya akan merekomendasikan metode kedua atau ketiga yang ia gambarkan bahkan jika Anda menggunakan fungsi bawaan dan tidak menggunakan argumen.
sumber
Saya punya beberapa perintah ajax yang ingin saya jalankan dengan penundaan di antaranya. Berikut adalah contoh sederhana dari satu cara untuk melakukan itu. Saya siap untuk dicabik-cabik karena pendekatan saya yang tidak konvensional. :)
Anda dapat menyalin blok kode dan menempelkannya ke jendela konsol dan melihat sesuatu seperti:
sumber
Solusi paling sederhana untuk memanggil fungsi Anda dengan penundaan adalah:
sumber
fungsi penundaan:
penggunaan di dalam
async
fungsi:sumber
Seperti yang lain katakan, setTimeout adalah taruhan Anda yang paling aman.
Tetapi kadang-kadang Anda tidak dapat memisahkan logika dengan fungsi baru maka Anda dapat menggunakan Date.now () untuk mendapatkan milidetik dan melakukan penundaan sendiri ....
sumber