javascript - 检查未决调用

标签 javascript

我想知道是否有任何方法可以检查是否有任何将在某个时刻执行的未决调用,例如来自 AJAX 请求或计时器的回调 (setTimeout ).

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

最佳答案

考虑到 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);

一些注意事项:

关于javascript - 检查未决调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13604365/

相关文章:

javascript - 多个下拉 <select> 菜单,一次只能选择一个

javascript - 错误 : WebGL warning: vertexAttribPointer: -1 is not a valid `index`

javascript - 如何导入 popper.js?

javascript - 如何使用基于 promise 的 node.js 编码区分编程错误和操作错误?

javascript - 使用 math.random 函数的多个输出

JavaScript 字符串到 bool 值

javascript - AngularJS - 打开或转发 $http.post application/octet-stream javascript 响应

javascript - setTimeout/Promise.resolve : Macrotask vs Microtask

javascript - 如何反转 FOR 循环中的顺序

javascript - 使用 angular $resource TypeScript 获取字符串数组