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