sho*_*a T 5 javascript event-loop node.js requirejs
我需要覆盖以下代码
这里的函数将在下一个tick中执行
req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) {
setTimeout(fn, 5);
} : function (fn) { fn(); };
Run Code Online (Sandbox Code Playgroud)
有了这个,
window.require.nextTick = function(fn) { fn(); };
Run Code Online (Sandbox Code Playgroud)
由于该函数将立即被调用,在这种情况下它是否会在下一次打勾时执行?
如果我将代码更改为第二个选项,是否会出现问题,如果是,为什么???
我不建议进行这种更改,因为一般来说这可能会出现问题。的文档require.nextTick(出现在函数定义之前)说:
在事件循环的当前标记之后执行某些操作。
同步调用fn违反了执行应在“当前报价之后”发生的规范。(请参阅我的答案末尾以了解可能的反对意见。)
如果您想知道为什么这可能是一个问题,请考虑 RequireJS 监听 DOM 事件。拥有类似函数的一件事require.nextTick是为事件处理程序提供运行的机会。如果您设置require.nextTick同步执行其函数,那么您就没有机会运行事件处理程序。在某些情况下,这可能会导致 RequireJS 停止正常工作。
此时,有人可能会反对 is 的定义,nextTick让它fn同步调用是可以的,因为如果setTimeout没有定义,那么它确实会fn同步调用:
req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) {
setTimeout(fn, 4);
} : function (fn) { fn(); };
Run Code Online (Sandbox Code Playgroud)
我认为这适用于异常情况,而不是通过 HTTP 请求异步加载模块的普通情况。在某些情况下,例如缺少浏览器或 Node.js 提供的 JS 环境的嵌入式设备,执行使用 RequireJS 的软件的唯一方法是加载已通过r.js并包含require.js在捆绑包中的优化捆绑包。在这种情况下,同步nextTick调用fn是没有意义的,因为当 RequireJS 执行时,所有模块都已经加载。
| 归档时间: |
|
| 查看次数: |
440 次 |
| 最近记录: |