2013-05-02 5 views
2

setTimeout 또는 setInterval에서 반환 된 시간 초과 ID가 있다고 가정 해 봅니다.setTimeout 또는 setInterval과 관련된 함수 가져 오기

어떤 방식 으로든 원래의 기능 또는 코드를 가져올 수 있습니까? 이 같은

뭔가 :

var timer_id = setTimeout(function() { 
    console.log('Hello Stackoverflowers!'); 
}, 100000); 

var fn = timer_id.get_function(); // desired method 
fn(); // output: 'Hello Stackoverflowers!' 
+3

Afaik 당신은'setTimeout'에 당신 자신의 래퍼를 써야 할 것입니다. –

답변

2

당신은 주위 setTimeout 래퍼를 넣을 수 있습니다 콜백에 문자열을 사용합니다. 하지만 아무도 그렇게하지 않습니까?

지원하기가 쉽지는 않지만 ES5 추가 매개 변수를 콜백 함수에 전달하는 것도 지원되지 않습니다.

0

ID를 setTimeout/setInterval에서 반환은 다른 모든 숫자는 것 그 것 외에 다른 속성이나 방법이없는, 단지 숫자입니다. 당신이 그 기능을 얻고 싶은 경우에, 당신은 대신 익명을 사용하는 먼저 선언 할 수 있습니다 : 당신이 나중에 검색 할 수 있도록

var myFunc = function() { 
    console.log('Hello Stackoverflowers!'); 
}; 

var timer_id = setTimeout(myFunc, 100000); 

myFunc(); // output: 'Hello Stackoverflowers!' 

clearTimeout(timer_id); // unless you want it to fire twice 
+0

OP는 그들이 ID를 갖고 있으며, setTimeout ID를 가져오고 어떤 기능이 그것과 관련되어 있는지 알고 싶어합니다. 당신의 대답은 대답하지 않습니다. – epascarello

+0

@epascarello 불가능하기 때문에 ID는 숫자입니다. – jbabey

+1

코드 – epascarello

0

당신은 객체의 각 타임 아웃 기능을 저장할 수 있습니다. 이 경우 작동하지 않습니다 : (... 테스트의 몇 반복 후) 그냥 함께이 일을 던졌다

(function() { 
    var cache = {}; 

    var _setTimeout = window.setTimeout; 
    var _clearTimeout = window.clearTimeout; 

    window.setTimeout = function(fn, delay) { 
     var id = _setTimeout(function() { 
      delete cache[id]; // ensure the map is cleared up on completion 
      fn(); 
     }, delay); 
     cache[id] = fn; 
     return id; 
    } 

    window.clearTimeout = function(id) { 
     delete cache[id]; 
     _clearTimeout(id); 
    } 

    window.getTimeout = function(id) { 
     return cache[id]; 
    } 
})(); 

NB를 -

var timeout_funcs = {}; 

function addTimeout(func,time) { 
    var id = window.setTimeout(func,time); 
    timeout_funcs[id] = func; 
    return id; 
} 

function getTimeout(id) { 
    if(timeout_funcs[id]) 
     return timeout_funcs[id]; 
    else 
     return null; 
} 

function delTimeout(id) { 
    if(timeout_funcs[id]) { 
     window.clearTimeout(timeout_funcs[id]); 
     delete timeout_funcs[id]; 
    } 
} 
+1

을 사용하면 배열이 아닌 데이터를 보관하는 데 '객체'를 사용해야합니다. – Alnitak

+0

네가 맞아 – nicolas

+1

여기에서 정화가 안되니? – rogerdpack

1
var timeouts = {}; // hold the data 
function makeTimeout (func, interval) { 

    var run = function(){ 
     timeouts[id] = undefined; 
     func(); 
    } 

    var id = window.setTimeout(run, interval); 
    timeouts[id] = func; 

    return id; 
} 
function removeTimeout (id) { 
    window.clearTimeout(id); 
    timeouts[id]=undefined; 
} 
function doTimeoutEarly (id) { 
    func = timeouts[id]; 
    removeTimeout(id); 
    func(); 
} 

var theId = makeTimeout(function(){ alert("here"); }, 10000); 
console.log((timeouts[theId] || "").toString()); 
timeouts[theId](); // run function immediately, will still run with timer 
관련 문제