2012-04-09 14 views
25

Ero curioso di sapere cosa restituisce setTimeout. Così ho fatto un rapido test:Cosa restituisce setTimeout?

var thing = setTimeout(function(){},1); 

E quello che mi ha sorpreso è che mi ha dato un numero. 1351 Ogni volta è diverso.

Quindi è davvero tutto ciò che ritorna è un numero? Quindi posso farlo anche io?

clearTimeout(1351); 

Molto confusa ...

+0

Il suo manico ID del timer: http://www.w3.org/TR/Window/#timers –

risposta

30

E 'una maniglia (un identificativo univoco). Quando crei un timeout, il runtime JavaScript associa un intero "handle" al timeout che hai creato e può identificare quel timeout con i ritorni dell'handle setTimeout(). Quando esegui clearTimeout(), saprai di quale timeout stai parlando guardando l'handle unico che passi.

9

Si può pensare ad esso come a timerID, che identifica univocamente un timer, in modo che tu possa resettare da clearTimeout(timerID)

8

esso può essere un Object, ho provato con node.js:

var sto = setTimeout(
    function(){console.log('ping');}, 
    1000 
); 

console.log(sto); 

Il risultato è:

{ _idleTimeout: 1000, 
    _idlePrev: 
    { '0': [Function: listOnTimeout], 
    _idleNext: [Circular], 
    _idlePrev: [Circular], 
    msecs: 1000 }, 
    _idleNext: 
    { '0': [Function: listOnTimeout], 
    _idleNext: [Circular], 
    _idlePrev: [Circular], 
    msecs: 1000 }, 
    _idleStart: 2413359232, 
    _onTimeout: [Function], 
    _repeat: false, 
    domain: 
    { domain: null, 
    _events: { error: [Function] }, 
    _maxListeners: undefined, 
    members: [] } } 
+1

Wow questo è interessante. –

0

è un ID attività (preferisco pensare che sia un ID task anziché un Timeout_ID che confonde tutti).

Immaginate di dover avviare una funzione predefinita: "f_cup_of_tea", che ogni individuo normale avrebbe bisogno dopo 5 minuti sul vostro sito web. :

tea_Task_ID = window.setTimeout(f_cup_of_tea, (5*60*1000), 15, 2); 

come: funzione f_cup_of_tea (milk_ml, zucchero) {....}

ma purtroppo, con dieci secondi di ritardo, un utente psychadelic preferiscono ottenere qualcosa di diverso rispetto al mondo intero, e scegliere un bad_tequila ...

è necessario annullare la deliziosa "f_cup_of_tea" in programma entro cinque minuti ... fortunatamente javascript hanno pensando a questo tipo di problema e si può usare:

window.clearTimeout(tea_Task_ID); 

(ma funziona solo se "f_cup_of_tea" non è stato ancora avviato).

prossimo, è possibile avviare:

tequila_Task_ID = window.setTimeout(f_bad_tequila, (5*1000), 0); // for in 5s, with zero ice... 
+0

Per quanto mi riguarda, penso seriamente che la mia risposta sia molto migliore di tutte le altre, perché è divertente ed educativa :) –