Skip to content

Latest commit

 

History

History
48 lines (44 loc) · 1.03 KB

Question_2715.md

File metadata and controls

48 lines (44 loc) · 1.03 KB

LeetCode Records - Question 2715 Timeout Cancellation

Attempt 1: Use setTimeout() and clearTimeout()

/**
 * @param {Function} fn
 * @param {Array} args
 * @param {number} t
 * @return {Function}
 */
var cancellable = function(fn, args, t) {
    const timer = setTimeout(() => {
        fn(...args);
    }, t);

    return () => {
        clearTimeout(timer);
    }
};

/**
 *  const result = [];
 *
 *  const fn = (x) => x * 5;
 *  const args = [2], t = 20, cancelTimeMs = 50;
 *
 *  const start = performance.now();
 *
 *  const log = (...argsArr) => {
 *      const diff = Math.floor(performance.now() - start);
 *      result.push({"time": diff, "returned": fn(...argsArr)});
 *  }
 *       
 *  const cancel = cancellable(log, args, t);
 *
 *  const maxT = Math.max(t, cancelTimeMs);
 *           
 *  setTimeout(cancel, cancelTimeMs);
 *
 *  setTimeout(() => {
 *      console.log(result); // [{"time":20,"returned":10}]
 *  }, maxT + 15)
 */
  • Runtime: 60 ms (Beats: 82.15%)
  • Memory: 49.74 MB (Beats: 17.05%)