1
+ /*
2
+ 2725. Interval Cancellation
3
+
4
+ Submitted: January 17, 2025
5
+
6
+ Runtime: 43 ms (beats 99.89%)
7
+ Memory: 49.62 MB (beats 51.41%)
8
+ */
9
+
10
+ /**
11
+ * @param {Function } fn
12
+ * @param {Array } args
13
+ * @param {number } t
14
+ * @return {Function }
15
+ */
16
+ var cancellable = function ( fn , args , t ) {
17
+ fn ( ...args ) ;
18
+ let id = setInterval ( function ( ) {
19
+ fn ( ...args ) ;
20
+ } , t ) ;
21
+ return function ( ) {
22
+ clearInterval ( id ) ;
23
+ }
24
+ } ;
25
+
26
+ /**
27
+ * const result = [];
28
+ *
29
+ * const fn = (x) => x * 2;
30
+ * const args = [4], t = 35, cancelTimeMs = 190;
31
+ *
32
+ * const start = performance.now();
33
+ *
34
+ * const log = (...argsArr) => {
35
+ * const diff = Math.floor(performance.now() - start);
36
+ * result.push({"time": diff, "returned": fn(...argsArr)});
37
+ * }
38
+ *
39
+ * const cancel = cancellable(log, args, t);
40
+ *
41
+ * setTimeout(cancel, cancelTimeMs);
42
+ *
43
+ * setTimeout(() => {
44
+ * console.log(result); // [
45
+ * // {"time":0,"returned":8},
46
+ * // {"time":35,"returned":8},
47
+ * // {"time":70,"returned":8},
48
+ * // {"time":105,"returned":8},
49
+ * // {"time":140,"returned":8},
50
+ * // {"time":175,"returned":8}
51
+ * // ]
52
+ * }, cancelTimeMs + t + 15)
53
+ */
0 commit comments