Javascript 如何对数组中的每个项使用setTimeout?
在以下方面:Javascript 如何对数组中的每个项使用setTimeout?,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,在以下方面: ko.utils.arrayForEach(cards, function (card) { setTimeout(function () { observableData().saveCard(card); }, 1000); }); 这应该为阵列中的每一张卡等待一秒钟,但它只是等待一秒钟,然后在阵列中爆炸。如何实现预期行为?您需要增加超时时间 var idx = 1; ko.utils.arrayForEach(
ko.utils.arrayForEach(cards, function (card) {
setTimeout(function () {
observableData().saveCard(card);
}, 1000);
});
这应该为阵列中的每一张卡等待一秒钟,但它只是等待一秒钟,然后在阵列中爆炸。如何实现预期行为?您需要增加超时时间
var idx = 1;
ko.utils.arrayForEach(cards, function (card) {
setTimeout(function () {
observableData().saveCard(card);
}, (idx++) * 1000);
});
由于数组foreach
看起来不像是给出项目的索引,因此您需要维护一个单独的索引
ko.utils.arrayForEach(cards, function (card) {
var timeout = setTimeout(function () {
observableData().saveCard(card);
}, 1000);
clearTimeout(timeout);
});
它正在为数组中的每个项目等待一秒钟。您刚刚同时启动了每个项目的计时器。第一个项目发生后,为下一个项目设置计时器。或者,设置一个时间间隔,在每次回调时循环。你们是三胞胎还是什么的?我刚刚注意到了…这只是coincidence@kadumel我不知道这是怎么发生的,但我想大多数叫阿伦的人都是programmers@kadumel..ohh这是不可能的。。。?
var timer;
ko.utils.arrayForEach(cards, function (card)
{
window.clearTimeout(timer);
timer=window.setTimeout(function () {
observableData().saveCard(card);
}, 1000);
});