我在NodeJS中的函数内部运行了一个长循环,并且知道JS本质上不允许任何东西中断函数,我想知道这是他们暂停函数执行以侦听来自客户端的请求的一种方法目前能够做

最佳答案

您不能在函数执行时中断它。您需要做的是重构导致问题的循环。

您必须打破循环本身:


代替循环,每次迭代都应使用setTimeout()调用下一个
使用发电机。与生成器之间的传递会中断eventloop,并允许其他事件在两者之间执行。


这就是我使用setTimeout的意思:

给定功能:

function syncLoop(args) {
    var localVar;
    for (i = 0; i < max; i++) {
        doSomething(args, localVar)
    }
}


将循环替换为setTimeout(或setImmediate()),如下所示:

function asyncLoop(args) {
    var localVar;
    function innerLoop(i){ if(i < max){
         doSomething(args, localVar)
         setTimeout(function(){
               i++; innerLoop(i);
         }, 0);
     } }
    innerLoop(0);
}


这样,在每次迭代时,控件都会传递到事件循环,并且可以处理其他独立请求。

关于javascript - 暂停功能以监听请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44157023/

10-13 07:37