为了更好地理解异步和Fibre,我想知道是否存在一个全局变量,该变量在事件循环的每一回合都递增。
我希望能够在每个console.log语句中看到打印出的不同值,并且显然我们不能依靠系统时间来这样做。
function getEventLoopCounter () { /* magic occurs */ }
// Turn 1
console.log("I'm on loop number: ", getEventLoopCounter());
// Turn > 1
setTimeout(function(){
console.log("I'm on different loop: ", getEventLoopCounter());
}, 0);
最佳答案
也许 setImmediate
中的Node timers module将起作用。文档中对 setImmediate
的引用:
使用函数闭包和递归,您可以执行以下操作:
var eventLoopCounter = 0;
setImmediate(function incrementEventLoopCounter() {
eventLoopCounter++;
setImmediate(incrementEventLoopCounter);
});
// Logging the total number of iterations every second.
setInterval(function() {
console.log('The event loop has finished '
+ eventLoopCounter
+ ' iterations.');
}, 1000);
顺便说一句,在
timers
模块文档的开头,它指出:这就是为什么
setImmediate
不需要timers
模块就可以工作的原因。我想我应该注意,我尝试使用
process.nextTick
做类似的事情,但是在出现一系列有用的警告消息之前出现错误,这些警告消息使我指向上面的函数:...
(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.
(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.
RangeError: Maximum call stack size exceeded