3

AJAX リクエストやタイマーからのコールバックなど、ある時点で実行される保留中の呼び出しがあるかどうかを確認する方法があるかどうか疑問に思っています ( setTimeout)。

JavaScript を実行しているエンジンのスタック全体をチェックするようなものです。

4

1 に答える 1

2

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);

いくつかのメモ:

于 2013-12-11T08:11:37.937 に答える