我找到了这样的代码段
但是如果你看到方法not_blocking(),它仍然在等待doExpensiveComputationOn()方法完成(尽管只是第一次)。我甚至可以绕过它吗?因此它不会等待昂贵方法的单次调用。
答案 0 :(得分:3)
Javascript作为单个执行线程运行(除了webworkers - 甚至它可以变化)。看起来它像uses an task queue一样多任务; setImmediate()函数只是在任务队列的末尾添加了该函数。
setimmediate函数是一个仅限MSIE的函数,我建议不要使用它。你可以用setTimeout(processNext,0)做类似的事情;虽然某些浏览器的语义与window.onload事件有些不同,或者在最新版本的javascript中使用yield() / generator construct。
Webworkers或单独的框架/窗口是让javascript真正并行运行的唯一方法。
答案 1 :(得分:0)
not_blocking
正在做的就是在数组中的每个项目之后延迟执行,以便可以在两者之间处理UI(和其他)事件。
如果您希望函数暂时返回,只需将最后一行从processNext()
更改为setImmediate(processNext);
即可。但doExpensiveComputationOn
仍会在某个时候阻止此线程。正如Sirko评论的那样;如果您担心阻止主线程,请使用后台工作程序。