Moe*_*ini 7 javascript deferred
我试图理解延迟是如何工作的,所以在他们所有人都使用setTimeout.
this.callbacks;// array of functions reference
this.callbacks.forEach(function(callback){
window.setTimeout(function(){
callback(data);
},0);
});
Run Code Online (Sandbox Code Playgroud)
这个问题的一个例子就是使用setTimeout
resolve: function (data) {
this.promise.okCallbacks.forEach(function(callback) {
window.setTimeout(function () {
callback(data)
}, 0);
});
},
Run Code Online (Sandbox Code Playgroud)
调用循环中的函数setTimeout与callback();或之间有什么不同callback.call();
Spu*_*ley 12
这样做的原因是允许javascript线程有机会触发可能在队列中等待的任何其他事件.
Javascript是单线程的.如果触发了某个事件,则只能在当前运行的代码完成时运行.
使用setTimeout零延迟有效地告诉JS解释器callback函数调用是新上下文的一部分,并且当前代码块已完成.这意味着JS将在调用之前抓住机会callback()检查是否需要处理任何其他事件.
虽然这可能会使callback()自己无法立即调用,但这对您网站的整体性能有利:
可能需要处理的其他事件包括单击事件和其他UI触发器.如果您没有给他们执行的机会,可能会使您的用户界面显得迟缓或无响应.
| 归档时间: |
|
| 查看次数: |
4986 次 |
| 最近记录: |