Что возвращает setTimeout?
Мне было любопытно, что возвращается setTimeout. Поэтому я сделал быстрый тест:
var thing = setTimeout(function(){},1);
И меня удивляет то, что он дал мне номер. 1351
Каждое время отличается.
Так оно действительно все, что он возвращает, это число? Так что я действительно могу это сделать?
clearTimeout(1351);
Очень запутанно...
Ответы
Ответ 1
Это дескриптор (уникальный идентификатор). Когда вы создаете тайм-аут, среда выполнения JavaScript связывает целочисленный "дескриптор" с тайм-аутом, который вы создали, и может идентифицировать, что время ожидания с помощью дескриптора setTimeout()
возвращается. Когда вы запустите clearTimeout()
, он будет знать, какой тайм-аут вы говорите, глядя на уникальный дескриптор, который вы проходите.
Ответ 2
Вы можете представить его как timerID
, которые однозначно идентифицируют таймер, так что вы можете reset на clearTimeout(timerID)
Ответ 3
Это может быть Object
, я тестировал его с помощью node.js
:
var sto = setTimeout(
function(){console.log('ping');},
1000
);
console.log(sto);
Вывод:
{ _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: [] } }
Ответ 4
это идентификатор задачи (я предпочитаю думать, что это task_ID, а не Timeout_ID, который смущает всех).
Представьте, что вам нужно запустить функцию по умолчанию: "f_cup_of_tea" , чтобы любой нормальный человек в конечном итоге нуждался через 5 минут на вашем веб-сайте.:
tea_Task_ID = window.setTimeout(f_cup_of_tea, (5*60*1000), 15, 2);
как: функция f_cup_of_tea (milk_ml, sugar) {....}
но, к сожалению, с опозданием на десять секунд, психоделический пользователь предпочитает приобретать нечто иное, чем весь мир, и выбирает bad_tequila...
вы должны отменить вкусный "f_cup_of_tea" , запланированный в течение пяти минут...
к счастью, javascript думает об этой проблеме, и вы можете использовать:
window.clearTimeout(tea_Task_ID);
(но он работает только в том случае, если "f_cup_of_tea" еще не запущен).
Далее вы можете запустить:
tequila_Task_ID = window.setTimeout(f_bad_tequila, (5*1000), 0); // for in 5s, with zero ice...