执行可取消的延迟函数
1.题目描述
现给定一个函数 fn ,一个参数数组 args 和一个以毫秒为单位的超时时间 t ,返回一个取消函数 cancelFn 。
在经过 t 毫秒的延迟后,应该调用 fn 函数,并将 args 作为参数传递。除非 在 t 毫秒的延迟过程中,在 cancelT 毫秒时调用了 cancelFn。并且在这种情况下,fn 函数不应该被调用。
2.思路
定义一个 cancellable 函数,该函数接受 fn(函数)、args(参数数组)和 t(延迟时间)作为参数,并返回一个取消函数 cancelFn。
创建一个延迟计时器 timer,在 t 毫秒后调用传入的 fn 函数,并将 args 作为参数传递。然后,返回一个函数,该函数会在调用时清除 timer,从而取消定时调用 fn。
1 | const timer = setTimeout(() => { |
3.类似题目间隔取消
现给定一个函数 fn,一个参数数组 args 和一个时间间隔 t,返回一个取消函数 cancelFn。
函数 fn 应该立即使用 args 调用,并且在每个 t 毫秒内再次调用,直到调用 cancelFn。
1 | fn(...args); |