循环内的setTimeout立即给出所有迭代

时间:2017-09-20 12:59:13

标签: javascript

我有以下代码:

myList = [["one", "two", "three"], ["uno", "dos", "tres"], ["1","2","3"]]    

    myList.forEach(function (subList) {
        setTimeout(function () {
            console.log(subList);
        }, 5000);
    });

我认为每5秒,这应该输出myList的每个元素,但是,不是迭代它只是等待五秒,然后一次输出三个子列表。

我该怎么做,所以它做了一个子列表,然后等了5秒,然后是下一个......

1 个答案:

答案 0 :(得分:3)

你必须这样做

myList = [["one", "two", "three"], ["uno", "dos", "tres"], ["1","2","3"]]    

    myList.forEach(function (subList, i) {
        setTimeout(function () {
            console.log(subList);
        }, 5000*(i+1));
    });

    setTimeout(function () {
        console.log(subList);
    }, 5000);

表示它将在至少5000ms之后打印subList,所有事件在5000ms后调用

  

5000 *(i + 1)将确保在5000ms,10000ms,15000ms之后调用它......