Проблема в том, как работает setTimeout
.Это не команда sleep
, где она останавливает цикл for.Скорее, он проходит через начальный цикл for и запускает три таймера примерно в одно и то же время, чтобы длиться по одной секунде каждый.Это означает, что они также заканчиваются примерно в одно и то же время.
Вы можете получить желаемый результат, сделав что-то более похожее на это (обратите внимание на i*delay
для таймера на setTimeout
. Таким образом, ваш первый таймердля 0 мс, второй для 1000 мс, третий для 2000 мс, и вы получите пораженные результаты, которые вы ищете.
var data = [
[
["data[0][0]"],
["data[0][1]"]
],
[
["data[1][0]"],
["data[1][1]"]
],
[
["data[2][0]"],
["data[2][1]"]
]
];
var delay = 1000;
function doSomething(i) {
setTimeout(function () {
for (let j = 0; j < data[i].length; j++) {
console.log(data[i][j]);
$('#result').html($('#result').html() + data[i][j]);
}
}, i*delay);
}
for (let i = 0; i < data.length; i++) {
doSomething(i);
}
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<div id="result"></div>