gpt4 book ai didi

javascript - 理解javascript中的setInterval

转载 作者:太空宇宙 更新时间:2023-11-04 03:10:26 25 4
gpt4 key购买 nike

我有一个函数可以执行异步操作,例如保存到数据库。想要一种首先插入行的机制,并且仅当第一个插入操作完成时才应发生下一次插入。

这是我尝试过的方法,它有点有效。

var 间隔 = true;

function insert() {
model.save(function () {
interval = true;
})
}
foreach(row, function (key, val) {
var interval1 = setInterval(function () {
if (interval) {
insert();
interval = false;
clearInterval(interval1);
}
}, 100)
})

这样做的正确方法吗?请阐明我对 javascript 中计时器的理解。

最佳答案

不,您不应该创建计时器来轮询某件事何时完成。这可能是最糟糕的方法。您想要做的是在每次前一个迭代完成时显式地开始下一个迭代。

以下是如何在不进行轮询的情况下执行此操作的总体思路。这个想法是,您需要创建一个可以连续调用多次的函数,并且每次调用它时,它将执行下一次迭代。然后,您可以从异步操作的完成处理程序中调用该函数。由于您没有一个方便的 foreach 循环来控制迭代,因此您必须弄清楚需要跟踪哪些状态变量来指导每次迭代。如果您的数据是一个数组,那么您所需要的只是数组的索引。

function insertAll(rows) {

// I'm assuming rows is an array of row items

// index to keep track of where we are in the iteration
var rowIndex = 0;

function insert() {
// keep going as long as we have more rows to process
if (rowIndex < rows.length) {
// get rows[rowIndex] data and do whatever you need to do with it

// increment our rowIndex counter for the next iteration
++rowIndex;
// save and when done, call the next insert
model.save(insert)
}
}
// start the first iteration
insert();
}

如果您的数组中没有数据,那么您可以在需要时获取数据的每个下一次迭代(当没有更多数据时停止),或者您可以在开始操作之前将所有数据收集到一个数组中并使用收集的数组。

关于javascript - 理解javascript中的setInterval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22593664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com