在我的html开头 iam初始化变量“movieSRC
”,如下所示:
<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)
是空的:(,但为什么?
答案 0 :(得分: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);
});
});
答案 1 :(得分: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);
});
});
答案 2 :(得分:0)
JavaScript代码确实按照它出现的顺序执行。但是,有些函数是异步的,这意味着它们在一个单独的线程中执行。您的第一个函数是否可能是异步的?
如果要确保在异步函数之后执行某些代码,请在异步函数的回调方法中调用该代码。