数组包含随机值
let checkTypes = ['a','b','c'];一样。 (数组的长度也是随机的。)

并且,该数组尝试通过数组的数量来调用函数this.switch()

所以,我的代码是...

for (let i = 0; i <= checkTypes.length-1; i++) {
    window.setTimeout(() => {
       this.switch(checkTypes[i]);
       if (i != 0 && i != checkTypes.length -1) window.setTimeout(() => this.switch(checkTypes[i+1]))
    });
}

在开发人员的工具控制台中,以下错误仍然存​​在([Violation] 'setTimeout' handler took <N>ms),并认为我的代码似乎无法正常工作。

我可以更改代码以免出现此错误吗?

最佳答案

对于初学者:
Chrome violation : [Violation] Handler took 83ms of runtime
这是说this.switch花费太长时间,使其感觉像是一个响应式应用程序。如果它足以满足您的需要,则无需对其进行修复即可。它正在尝试提供可以改善您的应用程序/代码的地方的概况。
这是您的代码版本更容易理解的地方:

var start = 0, end = checkTypes.length-1;
for (let i = start, t,n; i <= end ; i++) {
    var t = checkTypes[i];
    var n = (i  > start  && i <= ) && checkTypes[i+1];
    window.setTimeout(() => { this.switch(x); });
    if(y) window.setTimeout(() => { this.switch(y); );
}
这将导致执行树如下:
switch(arr[0]) i=0
switch(arr[1]) i=1
switch(arr[2]) i=2
switch(arr[2]) i=1
switch(arr[3]) i=3
switch(arr[3]) i=2
switch(arr[4]) i=4
switch(arr[4]) i=3

...
switch(arr[max-1]) i = max-1;
switch(arr[max]) i= max;
switch(arr[max]) i= max-1;
我认为可以将其表示为:
var start = 0, end = checkTypes.length-1;
for (let i = start, t,n; i <= end ; i++) {
    var t = checkTypes[i];
    window.setTimeout(() => { this.switch(x); });
    if(i > 1) window.setTimeout(() => { this.switch(x); });
}

09-17 11:34