Skip to content

Latest commit

 

History

History
80 lines (54 loc) · 2.51 KB

File metadata and controls

80 lines (54 loc) · 2.51 KB

English Version

题目描述

现给定一个函数 fn ,一个参数数组 args 和一个以毫秒为单位的超时时间 t ,返回一个取消函数 cancelFn

在经过 t 毫秒的延迟后,除非 先调用 cancelFn ,否则 fn 应该以 args 作为参数被调用。并且在这种情况下,fn 不应该被调用。

 

示例 1:

输入:fn = (x) => x * 5, args = [2], t = 20
输出:[{"time": 20, "returned": 10}]
解释:
const cancelTime = 50
const cancel = cancellable((x) => x * 5, [2], 20); // 在 t=20ms 时调用 fn(2)
setTimeout(cancel, 50);

cancelTime(50ms)在延迟时间(20ms)之后,所以 fn(2) 应该在 t=20ms 时调用。fn 的返回值是 10。

示例 2:

输入:fn = (x) => x**2, args = [2], t = 100
输出:[]
解释:
const cancelTime = 50 
const cancel = cancellable((x) => x**2, [2], 100); // fn(2) 没被调用
setTimeout(cancel, cancelTime);

fn(2) 从未被调用,因为 cancelTime(50ms)在延迟时间(100ms)之前。

示例 3:

输入:fn = (x1, x2) => x1 * x2, args = [2,4], t = 30, cancelTime = 100
输出:[{"time": 30, "returned": 8}]
解释:
const cancelTime = 100
const cancel = cancellable((x1, x2) => x1 * x2, [2,4], 30); // fn(2,4) 在 t=30ms 时被调用
setTimeout(cancel, cancelTime);

fn(2) 从未被调用,因为 cancelTime(50ms)在延迟时间(100ms)之前。

 

提示:

  • fn 是一个函数
  • args 是一个有效的 JSON 数组
  • 1 <= args.length <= 10
  • 20 <= t <= 1000
  • 10 <= cancelT <= 1000

解法

TypeScript