01/10/2018, 15:42
Cho e hỏi Vòng lặp trong javascript
Em có code như này do e viết
<link rel="stylesheet" href="https://vip.pro.vn/bootstrap/css/bootstrap.min.css">
<script src="https://vip.pro.vn/plugins/jQuery/jquery-3.1.1.min.js"></script>
<script src="https://vip.pro.vn/bootstrap/js/bootstrap.min.js"></script>
<div id="total"></div>
<div id="running"></div>
<textarea class="form-control" rows="10" id="result"></textarea>
<script>
let number = [1,2,3,4,5];
$('#total').text('Total: '+ number.length);
for(let i = 0; i < number.length; i++){
$('#running').text('Running: '+(i+1));
for(let j = 0; j < 10; j++){
setTimeout(function(){
$('#result').append(j+"
");
}, 1000);
}
}
</script>
em muốn khi chạy thì div#running sẽ hiện lần lượt từ 1-5, mỗi một lần thì mỗi giây sẽ hiện từ 0-9 vào textarea (tức là phải mất 9 giây để hiện hết từ 0-9 vào textarea).
nhưng mà khi chạy là div#running nó lại gán luôn đến 5 và textarea nó ko chạy theo thứ tự mỗi giây 1 số mà in ra luôn 1 lần.
ai giúp em sửa lại code dc ko ạ
Bài liên quan
Tại vì bạn nghĩ là setTimeout khi chờ 1s là nó sẽ chờ 1s.
Nhưng không phải vậy. Nó chạy tiếp. Thế nên bạn nên chỉnh tgian settimeout cách nhau mỗi s
Có bài tương tự đây
Thì bạn chỉnh code trên là được.
Ở phần thời gian ấy :3
hic, em chạy thì ở div#running nó vẫn ra số 5 luôn (đang chạy chỉ số thứ 5 trong mảng), còn textarea thì ra 1 phát từ 0-9 chứ ko fai mỗi giây ra một số ạ
đây ạ https://vip.pro.vn/test.php
có khi nào phải dùng đến 2 setTimeout ở mỗi vòng lặp ko nhỉ
Đúng rồi :3
Bây giờ có 5 lần.
Mỗi lần in 10 phần tử.
Vậy có phải pahafn tử 1 in ra ở giây 1. Thứ 2 in ra 2 …
Vậy tính toán sao mà nó in ra vậy là được.
Gợi ý là
i * 10 + j
em làm mãi chả đc, viết giúp em được ko ạ :((
ui trộ ôi chị đáng yêu quá đi :*
Mình có ghi chú 2 cách loop async function (trường hợp này là
setTimeout
) mà mình biết được tại blog cá nhân: https://tbson.info/javascript-promise-loop/Paste lên đây luôn để mọi người tiện theo dõi
Cách 1: Dùng Coroutine
Cách 2: Dùng await trong vòng lặp
trước đó có 1 anh code xử lí vấn đề này vẫn sử dụng setTimeout và em test đc như mong đợi, liệu nên sử dụng cái nào ạ hihi
Việc đó tuỳ vào thói quen và sở thích của bạn thôi.
Nên chọn cách nào bạn thấy trực quan và dễ hiểu nhất để tiện cho việc bảo trì sau này.