Pelaksanaan Fungsi Segera Tidak Dijangka dengan setTimeout
Dalam percubaan untuk menjadualkan panggilan fungsi pada selang waktu tertentu, pengguna menghadapi isu di mana setTimeout fungsi melaksanakan fungsi dengan serta-merta, walaupun tamat masa yang ditentukan. Fungsi doRequest harus dipanggil pada selang 10 saat, tetapi ia dipanggil serta-merta.
Punca pelaksanaan segera ini terletak pada cara fungsi setTimeout dipanggil. Coretan kod berikut menunjukkan isu:
setTimeout(doRequest(url, proxys[proxy]), proxytimeout);
Dalam kod ini, fungsi doRequest diluluskan sebagai hujah pertama untuk setTimeout, tetapi fungsi sedang dilaksanakan serta-merta dan bukannya dijadualkan.
Penyelesaian:
Untuk menyelesaikan isu ini dan memastikan doRequest dijadualkan, terdapat tiga cara alternatif untuk menggunakan setTimeout:
Lulus Nama Fungsi sebagai Rentetan:
setTimeout('doRequest(' + url + ',' + proxys[proxy] + ')', proxytimeout);
Gunakan Fungsi Tanpa Nama:
(function(u, p, t) { setTimeout(function() { doRequest(u, p); }, t); })(url, proxys[proxy], proxytimeout);
Lepaskan Nama Fungsi Dahulu, Kemudian Parameter:
setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
Atas ialah kandungan terperinci Mengapa Fungsi setTimeout Saya Melaksanakan Serta-merta?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!