如何在数组中使用setTimeout?

3
在接下来的内容中:
ko.utils.arrayForEach(cards, function (card) {
        setTimeout(function () {
            observableData().saveCard(card);
        }, 1000);
    });

本应该等待数组中每张卡片一秒钟,但实际上只等了一秒钟然后就快速遍历完了整个数组。如何才能达到预期的行为?


2
对于数组中的每个项目,它会等待一秒钟。你刚刚同时为每个项目启动了计时器。当第一个计时器结束后,为下一个项目设置计时器。或者,设置一个间隔,并在每个回调函数中进行循环。 - undefined
3个回答

6
您需要增加超时时间。
var idx = 1;
ko.utils.arrayForEach(cards, function (card) {
    setTimeout(function () {
        observableData().saveCard(card);
    }, (idx++) * 1000);
});

由于arrayForEach方法没有给出元素的索引,因此您需要维护一个单独的索引。


1
ko.utils.arrayForEach(cards, function (card) {
     var timeout =   setTimeout(function () {
            observableData().saveCard(card);
        }, 1000);
      clearTimeout(timeout);
    });

你们是三胞胎还是什么? - undefined
2
呵呵,我刚刚才注意到...那只是巧合。 - undefined
@kadumel 我不知道怎么回事,但我觉得大部分叫ARUN的人都是程序员。 - undefined
@kadumel..哦,为什么它不可能呢...? - undefined

1

尝试

var timer;
ko.utils.arrayForEach(cards, function (card) 
{
      window.clearTimeout(timer);
        timer=window.setTimeout(function () {
            observableData().saveCard(card);
        }, 1000);
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接