[Easy] LeetCode JS 30 - 2715. Timeout Cancellation (可取消的延遲函式)
2024年3月5日
💎 加入 E+ 成長計畫 與超過 800+ 位工程師一同在社群成長,並獲得更多深度的軟體前後端學習資源
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);
};
};