Bagaimana untuk melaksanakan pelaksanaan tertunda dalam gelung JavaScript?
P粉680000555
2023-08-20 14:12:51
<p>Saya mahu menambah kelewatan/tidur dalam <kod>semasa</kod>
<p>Saya mencuba yang berikut: </p>
<pre class="brush:php;toolbar:false;">alert('hi');
for(var start = 1; start < 10; start++) {
setTimeout(fungsi () {
makluman('hello');
}, 3000);
}</pre>
<p>Hanya kes pertama yang betul: selepas memaparkan <kod>alert('hi')</code>, ia akan menunggu selama 3 saat dan kemudian memaparkan <code>alert('hello' )< /code>, tetapi kemudian <code>alert('hello')</code> akan dipaparkan berulang kali. </p>
<p>Apa yang saya mahu ialah selepas 3 saat menunjukkan <kod>alert('hello')</code>, ia perlu menunggu 3 saat lagi sebelum menunjukkan <code>alert(' hello')< ;/code>, dan sebagainya. </p>
Sejak ES7, terdapat cara yang lebih baik untuk menunggugelung:
Apabila enjin mencapai bahagianfungsi async . Kemudian, apabila tamat masa selesai, pelaksanaan diteruskan pada ketika itu. Ini sangat berguna kerana anda boleh menangguhkan (1) gelung bersarang, (2) bersyarat, (3) fungsi bersarang:
menunggu
, ia menetapkan tamat masa danawait
部分时,它设置一个超时并暂停执行async函数
menjeda pelaksanaanRujukan mengenai MDN
Walaupun ES7 kini disokong oleh NodeJS dan penyemak imbas moden, anda mungkin mahu menggunakan Memindahkan dengan BabelJS untuk dijalankan di mana-mana.
setTimeout()
Fungsi tidak menyekat dan kembali serta-merta. Jadi gelung anda berulang dengan cepat dan mencetuskan tamat masa 3 saat berturut-turut. Itulah sebabnya makluman pertama anda muncul selepas 3 saat dan semua makluman lain mengikuti secara berterusan tanpa sebarang kelewatan.Anda mungkin mahu menggunakan kod yang serupa dengan: