[30 Days of JS] Sleep / Timeout Cancellation
2025. 5. 15. 10:54ㆍ개인활동/코테
반응형
/**
* @param {number} millis
* @return {Promise}
*/
async function sleep(millis) {
return new Promise(resolve => setTimeout(resolve, millis));
}
- setTimeout : makes delay
- (callback, delayTime) : callback - 딜레이 후 실행시킬 함수 / delayTime - 얼마나 딜레이 시킬 것인가
/**
* @param {Function} fn
* @param {Array} args
* @param {number} t
* @return {Function}
*/
var cancellable = function(fn, args, t) {
const timeoutId = setTimeout(() => {
fn(...args);}, t);
const cancelFn = () => {
clearTimeout(timeoutId);
};
return cancelFn;
};
/**
* const result = [];
*
* const fn = (x) => x * 5;
* const args = [2], t = 20, cancelTimeMs = 50;
*
* const start = performance.now();
*
* const log = (...argsArr) => {
* const diff = Math.floor(performance.now() - start);
* result.push({"time": diff, "returned": fn(...argsArr)});
* }
*
* const cancel = cancellable(log, args, t);
*
* const maxT = Math.max(t, cancelTimeMs);
*
* setTimeout(cancel, cancelTimeMs);
*
* setTimeout(() => {
* console.log(result); // [{"time":20,"returned":10}]
* }, maxT + 15)
*/
- setTimeout() 을 통해 함수와 함수의 파라미터 대기 시간 입력 -> timeoutId를 반환
- clearTimeout을 통해 timeoutId를 입력하여 세팅한 스케줄을 cancel하도록 함
반응형
'개인활동 > 코테' 카테고리의 다른 글
[LeetCode/SQL50] Confirmation rate (0) | 2025.07.07 |
---|---|
[30 Days of JS] Interval Cancellation / Promise Time Limit (0) | 2025.05.18 |
[30 Days of JS] Memoize / Add two promises (1) | 2025.05.14 |
[30 Days of JS] Return length of arguments passed / (0) | 2025.05.11 |
[30 Days of JS] Array reduce transformation / Function composition (0) | 2025.05.10 |