【发布时间】:2018-03-22 22:00:45
【问题描述】:
在尝试找到一种方法来运行一些存储在如下数组中的函数时,我生成了以下代码。
这很好用,但有时它似乎在前一个函数完成之前执行了一个函数。
如何防止在前面的代码完成之前执行下面代码中的函数?
具有多个函数“调用”和参数的数组示例
["A3",[6]],["B1",["TEST",4,13]],["A10",[2]],["A7",[1,5]]
从上述数组执行每个函数调用的 for 循环
function routineConverter(v){
var routines = JSON.parse('[' + v + ']');
for ( var i=0; i < routines.length ; i++ ){
switch (routines[i][0]) {
case 'A1':
routines[i] = A1( routines[i][1] );
break;
case 'A2':
routines[i] = A2( routines[i][1] );
break;
case 'A3':
routines[i] = A3( routines[i][1] );
break;
case 'A4':
routines[i] = A4( routines[i][1] );
break;
case 'A5':
routines[i] = A5( routines[i][1] );
break;
case 'A6':
routines[i] = A6( routines[i][1] );
break;
case 'A7':
routines[i] = A7( routines[i][1] );
break;
case 'A8':
routines[i] = A8( routines[i][1] );
break;
case 'A9':
routines[i] = A9( routines[i][1] );
break;
case 'A10':
routines[i] = A10( routines[i][1] );
break;
case 'B1':
routines[i] = B1( routines[i][1] );
break;
case 'B2':
routines[i] = B2( routines[i][1] );
break;
case 'E':
routines[i] = conditionalAction( routines[i][1] );
break;
case 'X1':
//console.log(routines[i][1]);
routines[i] = REMOVE(routines[i][1] ); //B1( routines[i][1] );
break;
}
}
var a = [routines];
}
函数示例:
function A1(p) {
$('#tbl tr td:nth-child(' + parseInt(p) + ')').after('<td></td>');
}
【问题讨论】:
-
只有当你在某处执行一些异步代码时才会发生这种情况,你是否在任何函数中运行了一些?你能提供一个可运行的sn-p吗?
-
你尝试过承诺吗pan>
-
这是异步的吗?如果不是,你可以以 0 的间隔使用 setTimeout。如果是异步的,则使用 Promise。
-
如果这不是异步的,则保证您的函数在下一个开始执行之前完成。这是由于 Javascript 的同步、单线程(除非您使用网络工作者)性质。
-
这是一个非常奇怪的请求。用例是什么?我相当肯定一定有更好的解决方案。
标签: javascript jquery