0

我搜索了很多网站以获得一种方法来执行顺序回调,即第二个函数应该只在第一个函数完成后执行。在我的情况下,我正在更新按钮单击中节点的一些属性,并且每个属性更新都应该执行一个回调。我的问题是一些属性更新是基于以前的属性,我无法实现这一点..因为 javascript 全部执行。

所以请指出我正确的方向..如何在完成之前的回调后执行回调。

提前致谢。

这是我的代码:

function SetProperties() {
        var nodes = Control1.GetNodesList();
        var ColorStyle = {
            Color: 'Red',
            ForeColor: 'Maroon',
            ColorAlphaFactor: '255',
            ForeColorAlphaFactor: '255',
            Type: '2',                
            PathBrushStyle: '1'
        };

         var LineStyle = {                
            LineColor: 'Blue',
            LineWidth: '2'
         };

         Control1.SetColorStyle(nodes[0].FullName, ColorStyle);
         Control1.SetLocation(nodes[0], 150, 300);
         Control1.SetRadius(nodes[0], 20);
         Control1.SetShading(nodes[0], true);
         Control1.SetSize(nodes[0], 150, 150);
         Control1.SetLabel(nodes[0], label);            
         Control1.SetLineStyle(nodes[0], LineStyle);
    }
4

2 回答 2

0

如果理解,您可以在页面中定义隐藏字段

<input type='hidden' runat='server' id='funToCall'/>

然后你可以在你的javascript中创建开关

var funToCall=<% funToCall.Value %>;
switch(funToCall){
   case "fun1": Control1.SetColorStyle(nodes[0].FullName, ColorStyle); break;
   case "fun2": Control1.SetLocation(nodes[0], 150, 300); break;
...
}

并在后面的代码中定义在每个回发中要调用的下一个函数

funToCall.Value="next fun...";
于 2013-01-10T13:22:16.600 回答
0

这取决于您的第一个回调函数是如何工作的。JavaScript 实际上并不是一次全部执行,它在单个线程中按顺序执行。如果您的第一个回调在一系列命令中完成所有工作,那么下一段代码只有在完成后才会开始执行。

例如:

var a = 0;

function fun1() {
    a = 1;
}

function fun2() {
    alert(a);
}

fun1();
fun2();

将给出与以下相同的结果:

var a = 0;
a = 1;
alert(a);

因为fun2将在执行完毕fun1后执行。

于 2013-01-10T13:31:14.753 回答