Javascript 阻塞事件循环
我将通过Nodeschool参加“功能Javascript研讨会”。其中一个练习题为“阻塞事件循环”,我很难理解它。在过去的练习中,我确保真正尝试理解解决方案,这样,如果我不得不重做问题,我就会理解如何解决它(而不是第一次就把它砍掉)。但是这个概念确实对我有挑战性 修改样板文件中提供的递归重复函数,例如 它不会阻塞事件循环(即计时器和IO处理程序可以 火)。这必然要求repeat是异步的 在100毫秒后,超时将排队触发,这将打印 测试结果并退出流程。重复应该释放 控制事件循环,以允许超时在所有操作完成之前中断 在超时触发之前,尝试执行尽可能多的操作 样板Javascript 阻塞事件循环,javascript,asynchronous,functional-programming,Javascript,Asynchronous,Functional Programming,我将通过Nodeschool参加“功能Javascript研讨会”。其中一个练习题为“阻塞事件循环”,我很难理解它。在过去的练习中,我确保真正尝试理解解决方案,这样,如果我不得不重做问题,我就会理解如何解决它(而不是第一次就把它砍掉)。但是这个概念确实对我有挑战性 修改样板文件中提供的递归重复函数,例如 它不会阻塞事件循环(即计时器和IO处理程序可以 火)。这必然要求repeat是异步的 在100毫秒后,超时将排队触发,这将打印 测试结果并退出流程。重复应该释放 控制事件循环,以允许超时在所有操
函数重复(操作,num){
//对此进行修改,以便可以中断
如果(num消息队列(您称之为事件队列)是要处理的消息的列表
事件循环逐个处理这些消息,直到完成
您发布的repeat函数的阻塞版本将是
function repeat(operation, num) {
if (num <= 0) return
operation()
repeat(operation, --num)
}
函数重复(操作,num){
如果(num您似乎每10次重复一次就被困在这个上,这让我觉得您可能是从错误的角度来处理这个问题的perspective@JaromandaX我每10次重复引用一次主要是为了标记setTimeout函数在解决方案中的运行位置不重要——可以是任何数字。无论如何,我希望能被引导到一个正确的角度。我的目标是真正理解这个问题背后的概念,这样我就能够自己回答它。我的观点是,我相信你是以错误的方式来解决问题的。我可能(可能)错。我的观察可能是为了让你退后一步,重新评估问题,但是,再看看这个问题,我发现解决方案不是你的解决方案,你很难理解它。
function repeat(operation, num) {
if (num <= 0) return
operation()
// release control every 10 or so
// iterations.
// 10 is arbitrary.
if (num % 10 === 0) {
setTimeout(function() {
repeat(operation, --num)
})
} else {
repeat(operation, --num)
}
}
module.exports = repeat
function repeat(operation, num) {
if (num <= 0) return
operation()
repeat(operation, --num)
}
function repeat(operation, num) {
if (num <= 0) return
operation()
// release control every 10 or so
// iterations.
// 10 is arbitrary.
if (num % 10 === 0) {
setTimeout(function() {
repeat(operation, --num)
})
} else {
repeat(operation, --num)
}
}