[英]why javascripts functions are not loaded one after the other?
在我的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)
中的movieSRC movieSRC in myPlayer.src(movieSRC)
是空的:(,但是为什么呢?
它正在按顺序执行。 首先声明几个变量,然后执行一个函数,然后执行最后的那一部分。 您忽略的是正在执行的函数是异步的。 而且无论它运行的速度有多快,这是极不可能的网页加载完成前,将完成。
这是异步的:
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);
});
});
最有可能的是,在响应从上面的cloud.getStepsForModules函数返回之前,对最后的脚本进行评估。
另外,第二个脚本中存在语法错误-您缺少右花括号/括号/分号集。
尝试将使用结果的函数放在回调中,例如
<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);
});
});
JavaScript代码确实按显示顺序执行。 但是,有些函数是异步的,这意味着它们在单独的线程中执行。 您的第一个函数是否可能是异步的?
如果要确保在异步函数之后执行某些代码,请在异步函数的回调方法中调用该代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.