[Easy] LeetCode JS 30 - 2715. Timeout Cancellation (可取消的延遲函式)
2024年3月5日
💎 加入 E+ 成長計畫 如果你喜歡我們的內容,歡迎加入 E+,獲得更多深入的軟體前後端內容
LeetCode 30 Days of JavaScript
本題來自 LeetCode 的 30 天 JacaScript 挑戰
2715. Timeout Cancellation (可取消的延遲函式)題目描述
給定一個函式fn
,一個參數陣列args
和一個以毫秒為單位的超時時間t
,回傳一個取消函式cancelFn
。在cancelTimeMs
的延遲後取消函式 cancelFn
將被呼叫。
setTimeout(cancelFn,cancelTimeMs)
最開始,函式 fn
的執行應該延遲 t
毫秒。如果在 t
毫秒的延遲之前呼叫了函式 cancelFn
,它應該取消 fn
的延遲執行。如果在指定的延遲 t
內沒有呼叫 cancelFn
,則應執行 fn
,並使用提供的 args
作為參數。
// 範例
輸入: fn = (x) => x * 5, args = [2], t = 20
輸出: [{"time": 20, "returned": 10}]
解釋:
const cancelTimeMs = 50;
const cancelFn = 可取消((x) => x * 5, [2], 20);
setTimeout(cancelFn, cancelTimeMs);
fn(2) 在 20 毫秒時執行,而取消操作將這之後,延遲 cancelTimeMs(50毫秒)後被呼叫
本題解答
以下是本題的解答,詳細解題思路可以在 E+ 成長計畫 看到。如果想練習更多題目,推薦可以到 GreatFrontEnd 上練習。
解法
var cancellable = function (fn, args, t) {
const timerId = setTimeout(() => {
fn(...args);
}, t);
return function cancelFn() {
clearTimeout(timerId);
};
};