现给定一个函数 fn
,一个参数数组 args
和一个以毫秒为单位的超时时间 t
,返回一个取消函数 cancelFn
。
在经过 t
毫秒的延迟后,除非 先调用 cancelFn
,否则 fn
应该以 args
作为参数被调用。并且在这种情况下,fn
不应该被调用。
示例 1:
输入:fn = (x) => x * 5, args = [2], t = 20, cancelTime = 50 输出:[{"time": 20, "returned": 10}] 解释: const cancel = cancellable(fn, [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, cancelTime = 50 输出:[] 解释:fn(2) 从未被调用,因为 cancelTime(50ms)在延迟时间(100ms)之前。
示例 3:
输入:fn = (x1, x2) => x1 * x2, args = [2,4], t = 30, cancelTime = 100 输出:[{"time": 30, "returned": 8}] 解释:fn(2) 从未被调用,因为 cancelTime(50ms)在延迟时间(100ms)之前。
提示:
fn 是一个函数
args 是一个有效的 JSON 数组
1 <= args.length <= 10
20 <= t <= 1000
10 <= cancelT <= 1000