[Easy] LeetCode JS 30 - 2715. Timeout Cancellation (可取消的延遲函式)

2024年3月5日

💎 加入 E+ 成長計畫 與超過 400+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

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 上追蹤我們