Karena saya tidak bisa berkomentar, saya terpaksa menulis posting ini. Saya mendapatkan kode di bawah ini yang menunda / menunggu tepat 1 detik atau 1000 milidetik -
let n = 5;
for (let i=1; i<n; i++)
{
setTimeout( function timer()
{
console.log("hello world");
}, i*1000 );
}
Tapi bagaimana saya bisa menunda i * 1000 detik, bukannya tetap 1000 milidetik sehingga menunggu tergantung pada nomor iterasi?
Misalnya, jika n = 5, maka saya ingin loop tunda 1 detik di iterasi 1. 2 detik dalam iterasi kedua, dan seterusnya .. penundaan akhir akan 5 detik.
javascript
wait
Mike
sumber
sumber
i
- jika Anda tidak melakukan itu, maka Anda akan mendapatkan semua lansiran itu pada waktu yang sama .Jawaban:
Berikut adalah fungsi yang akan segera ditampilkan, lalu 1 detik kemudian, 2 detik setelah dari, 3 detik setelah itu dll. Tidak ada matematika khusus, tidak ada janji yang dibutuhkan
sumber
Sementara tugas ini dapat diselesaikan dengan janji, aliran reaktif dan alat keren lainnya (hei, belum ada yang menyarankan menggunakan pekerja!), Itu juga dapat diselesaikan dengan aritmatika kecil.
Jadi Anda ingin waktu habis secara berurutan: 1s, yang sebelumnya +2s, yang sebelumnya +3s, dan sebagainya. Urutan ini adalah: 1, 3, 6, 10, 15 ... dan formulanya adalah
a[n] = n * (n + 1) / 2
. Mengetahui bahwa...sumber
Anda dapat mencoba menggunakan async / await (Janji), untuk membuat serialisasi kode Anda:
sumber
Butuh beberapa waktu untuk menguraikan pertanyaan Anda xD, tetapi apakah ini yang Anda inginkan?
Ini akan terus mengaktifkan console.log dengan i * 1000 delay setiap kali. jadi yang pertama kali akan menjadi 1 detik panjang (1 * 1000), selanjutnya akan menjadi 2 detik dan seterusnya.
sumber
Loop tidak menunggu fungsi batas waktu selesai. Jadi, ketika loop dijalankan, jadwal peringatan Anda untuk setiap indeks.
Anda dapat menggunakan fungsi yang akan berjalan sesuai dengan indeks Anda tetapi dijadwalkan pada waktu yang sama. Anda dapat merasakan perbedaan 3 detik.
sumber
Gunakan panggilan rekursif bukan untuk loop
sumber