2013-01-10 80 views
0

我已經GOOGLE了很多網站來獲得一種方法來做順序回調,這是第二個函數應該只在完成第一個函數後才能執行。在我的情況下,我更新按鈕點擊中的節點的一些屬性,每個屬性更新應執行一次回調。我的問題是,一些屬性更新是基於以前的屬性,我不能實現這一點。因爲JavaScript執行所有在一個。如何在完成第一個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); 
    } 
+0

JavaScript在哪裏? – freefaller

+0

請更新您的問題以澄清您的問題。現在不清楚這裏有什麼問題。此外,JS中的函數無論如何都是一個接一個地執行的。 JS總是在一個線程中工作。所以,如果你調用'function1(); function2()'function2將在'function1'完成後執行 –

+0

另外,你現在怎麼調用回調?實際上,你可以在一些數組中註冊所有的回調,並在for循環中一個接一個地執行它們。 –

回答

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..."; 
0

這取決於你的第一個回調函數是如何工作的。 JavaScript並不是一次全部執行,而是在單個線程中按順序執行。如果你的第一個回調在一系列命令中完成了所有的工作,那麼下一段代碼只有在完成後纔會開始執行。

例如:

var a = 0; 

function fun1() { 
    a = 1; 
} 

function fun2() { 
    alert(a); 
} 

fun1(); 
fun2(); 

將給出相同的結果爲:

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

由於fun2fun1完成執行將被執行。

相關問題