如何在javascript完成第一个回调后执行第二次回调?

时间:2013-01-10 12:50:33

标签: javascript asp.net c#-4.0 web-applications

我搜索了很多网站以获得顺序回调的方法,这是第二个函数应该只在第一个函数完成后执行。在我的情况下,我正在按钮单击更新节点的一些属性,每个属性更新应执行单个回调。我的问题是,一些属性更新是基于以前的属性,我无法实现这一点..因为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);
    }

2 个答案:

答案 0 :(得分: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...";

答案 1 :(得分:0)

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

例如:

var a = 0;

function fun1() {
    a = 1;
}

function fun2() {
    alert(a);
}

fun1();
fun2();

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

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

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