[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);
  };
};
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們