2013-10-01 70 views
0

開始我的HTML IAM初始化變量 「movieSRC」 像這樣的:爲什麼JavaScript函數不會一個接一個地加載?

<script type="text/javascript"> 

     var activeStep = getUrlVars(); 
     var movieSRC; 

     cloud.getStepsForModules(activeStep.module, "UMCK").then(function(steps) { 

      var calculatedStep = activeStep.step - 1; 
      movieSRC = steps.steps[calculatedStep].movie; 

     }); 

HTML我有videojs一些功能。

<script type="text/javascript"> 
    _V_("movie").ready(function() { 
     var myPlayer = this; 
     myPlayer.src(movieSRC); 
</script> 
</html> 

我不明白爲什麼在最後一個html 部分將被載入第一,在一個one after the other開始我的網頁作爲第二個。我需要它相反! 我需要在頁面末尾保留videojs腳本,因爲視頻應該首先加載並在該腳本之後加載。

結論:movieSRC in myPlayer.src(movieSRC)是alwas空:(,但爲什麼

+5

也許'getStepsForModules'是一個異步函數?爲什麼你還需要一個'.then()'? –

+0

我可以用其他方式調用這樣的函數嗎? –

+0

不,但您可以重新組織腳本中的事件並正確使用回調。 – Shomz

回答

2

這是爲了執行。首先一個幾個變量被聲明,然後是一個函數離子被執行,然後該部分在最後執行。你所忽略的是正在執行的函數是異步的。並且無論它運行得有多快,它都會在頁面加載完成之前完成,這是極不可能的

這是異步的:

cloud.getStepsForModules(activeStep.module, "UMCK") 

所以,而它的執行一切加載。你需要發生後執行將需要什麼從其.then()處理程序中調用:

cloud.getStepsForModules(activeStep.module, "UMCK").then(function(steps) { 

    var calculatedStep = activeStep.step - 1; 
    movieSRC = steps.steps[calculatedStep].movie; 

    // I don't know this plugin, but find your "myPlayer" here somehow 
    myPlayer.src(movieSRC); 

}); 

或許這個命令會更有意義整體的插件:

_V_("movie").ready(function() { 
    var myPlayer = this; 

    cloud.getStepsForModules(activeStep.module, "UMCK").then(function(steps) { 
     var calculatedStep = activeStep.step - 1; 
     movieSRC = steps.steps[calculatedStep].movie; 
     myPlayer.src(movieSRC); 
    }); 
}); 
+0

YES !!!!!!!!!!!! :-) –

0

JavaScript代碼中出現的順序不執行。然而,也有是異步的,這意味着它們在一個單獨的線程中執行的功能是嗎?。可能是你的第一個功能是異步的?

如果你想確保特定的代碼是一個異步函數後執行,調用異步函數的回調方法的代碼。

1

最有可能,在從上面的cloud.getStepsForModules函數返回響應之前,正在對腳本進行評估。

此外,第二個腳本中存在語法錯誤 - 您錯過了右大括號/ paren /分號集。

嘗試將使用該結果的回調函數,像

<script type="text/javascript"> 

    var activeStep = getUrlVars(); 
    var movieSRC; 

    cloud.getStepsForModules(activeStep.module, "UMCK").then(function(steps) { 

     var calculatedStep = activeStep.step - 1; 
     movieSRC = steps.steps[calculatedStep].movie; 
     _V_("movie").ready(function() { 
      var myPlayer = this; 
      myPlayer.src(movieSRC); 
      }); 

    }); 
+0

YES !!!!!!!!!!!! :-) –

相關問題