gpt4 book ai didi

javascript - 光标 foreach 按时间间隔

转载 作者:行者123 更新时间:2023-12-03 04:15:46 28 4
gpt4 key购买 nike

这个 Meteor 服务器代码需要每 n 秒从集合中打印一次文档,我该如何让它工作?谢谢

      myCol.find({abc: undefined}).forEach(
function (doc) {
setTimeout(function (doc) {
console.log(JSON.stringify(doc));
}, 1000)
}
)

2个问题:文档未定义并且计时器未激活,因此它会立即触发。

最佳答案

您不需要示例,但需要对 JS 中的事件模型有基本的了解。 JS 是单线程语言,当您添加任何异步函数时,无论是通过 setTimeout、setInterval、requestAnimationFrame 还是将其添加到堆栈中。如果满足条件,引擎会在当前线程完成后一一触发函数。

在您的示例中,发生的情况是这样的:在 forEach 函数中,您添加了 annon 函数,该函数会为每个元素调用。

因此,集合正在在单线程中遍历。在此线程中,annon 函数正在添加超时函数,但不会立即调用它们。它们被添加到堆栈中。并且直到当前线程(在本例中是对集合的遍历)完成执行后才会调用此堆栈中的函数。

当前线程完成后,JS引擎从堆栈中取出函数并检查当前函数的条件是否满足(例如从添加到堆栈的时间起1000ms)。因为对于所有添加的超时回调,都满足条件(1000 毫秒,如果它们通过了第一个回调,那么它们肯定会通过后续回调)。他们被一一解雇,在你看来就像是同时被解雇。

示例如下:

var i = 0;
function traverseInLoop() {
console.log(JSON.stringify(myCol[i]));
if (myCol(++i) {
setTimeout(traverseInLoop, 1000)
}
}
setTimeout(traverseInLoop, 1000);

或者类似的东西,你应该明白,但如果你不明白,那么告诉我,我会详细说明

关于javascript - 光标 foreach 按时间间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44147000/

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