检查待处理的呼叫

时间:2012-11-28 11:48:20

标签: javascript

我想知道是否有办法检查是否有任何挂起的调用将在某个时刻执行,例如来自AJAX请求或计时器(setTimeout)的回调。 / p>

检查运行JavaScript的整个引擎堆栈。

1 个答案:

答案 0 :(得分:1)

考虑到AJAX回调依赖于服务器响应(成功,失败),您无法定义它们是否等待被调用,直到它实际上是时候调用它们。

但是,我想知道如何为setTimeout(也许是setInterval)实现这种检查:

window.timeoutsRegistry = [];

window.oldSetTimeout = window.setTimeout;

window.setTimeout = function(func, delay) {
    var tId = window.oldSetTimeout(function() {
        try {
            func();
        }
        catch (exception) {
            //Do Error Handling
        }
    }, delay);

    var startedAt = (+new Date);

    window.timeoutsRegistry[tId] = {
        id: tId,
        callback: func,
        delay: delay,
        startedAt: startedAt,
        isPending: function () {
            var now = (+new Date);

            return ((startedAt + delay) > now);
        }
    };
};

for(var i =0; i < 10; i++) {
    setTimeout(function() {
        1+1;
    }, 200000);
}


console.log(window.timeoutsRegistry);

var pending = window.timeoutsRegistry.filter(function(element) {
    return element.isPending();
});

console.log(pending);

一些注意事项: