@@ -69,7 +69,91 @@ The cancellation was scheduled to occur after a delay of cancelT (100ms), which
69
69
<!-- 这里可写当前语言的特殊实现逻辑 -->
70
70
71
71
``` ts
72
+ function cancellable(fn : Function , args : any [], t : number ): Function {
73
+ let cancelled = false ;
74
+ const cancel = () => {
75
+ cancelled = true ;
76
+ };
77
+ setTimeout (() => {
78
+ if (! cancelled ) {
79
+ fn (... args );
80
+ }
81
+ }, t );
82
+ return cancel ;
83
+ }
84
+
85
+ /**
86
+ * const result = []
87
+ *
88
+ * const fn = (x) => x * 5
89
+ * const args = [2], t = 20, cancelT = 50
90
+ *
91
+ * const start = performance.now()
92
+ *
93
+ * const log = (...argsArr) => {
94
+ * const diff = Math.floor(performance.now() - start);
95
+ * result.push({"time": diff, "returned": fn(...argsArr))
96
+ * }
97
+ *
98
+ * const cancel = cancellable(log, args, t);
99
+ *
100
+ * const maxT = Math.max(t, cancelT)
101
+ *
102
+ * setTimeout(() => {
103
+ * cancel()
104
+ * }, cancelT)
105
+ *
106
+ * setTimeout(() => {
107
+ * console.log(result) // [{"time":20,"returned":10}]
108
+ * }, maxT + 15)
109
+ */
110
+ ```
72
111
112
+ ### ** JavaScript**
113
+
114
+ ``` js
115
+ /**
116
+ * @param {Function} fn
117
+ * @param {Array} args
118
+ * @param {number} t
119
+ * @return {Function}
120
+ */
121
+ var cancellable = function (fn , args , t ) {
122
+ let cancelled = false ;
123
+ const calcel = () => (cancelled = true );
124
+ setTimeout (() => {
125
+ if (! cancelled) {
126
+ fn (... args);
127
+ }
128
+ }, t);
129
+ return calcel;
130
+ };
131
+
132
+ /**
133
+ * const result = []
134
+ *
135
+ * const fn = (x) => x * 5
136
+ * const args = [2], t = 20, cancelT = 50
137
+ *
138
+ * const start = performance.now()
139
+ *
140
+ * const log = (...argsArr) => {
141
+ * const diff = Math.floor(performance.now() - start);
142
+ * result.push({"time": diff, "returned": fn(...argsArr))
143
+ * }
144
+ *
145
+ * const cancel = cancellable(log, args, t);
146
+ *
147
+ * const maxT = Math.max(t, cancelT)
148
+ *
149
+ * setTimeout(() => {
150
+ * cancel()
151
+ * }, cancelT)
152
+ *
153
+ * setTimeout(() => {
154
+ * console.log(result) // [{"time":20,"returned":10}]
155
+ * }, maxT + 15)
156
+ */
73
157
```
74
158
75
159
<!-- tabs:end -->
0 commit comments