【发布时间】:2017-04-08 00:36:46
【问题描述】:
我有一个包含几个 JS 脚本的 HTML 文件:
<!DOCTYPE html> <html>
<head>
<title>Application</title>
<meta name="viewport" content="initial-scale=1.0">
<meta charset="utf-8">
<style>
html, body {
height: 100%;
margin: 0;
padding: 0;
}
</style>
<script src="https://d3js.org/d3.v4.js"></script>
<script src="initMap.js"></script>
<script src="CSVParsing.js"></script>
<script src="nbCinemas.js"></script>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=MYKEY&libraries=geometry&callback=initMap"></script>
</head>
<body>
<div id="map" style="width:1000px; height:800px; margin-left:auto; margin-right:auto;"></div>
</body>
我的问题是,在我的 nbCinemas.js 文件中,我使用了一个应该在 CSVParsing.js 中初始化的全局变量...但是它不是。问题是,我认为我的 CSVParsing.js 文件是最后加载的。这是文件:
var arrayData;
d3.csv("cinemas-a-paris.csv", function(data) {
data.forEach(function(d) {
d.lat = +d.lat;
d.lng = +d.lng;
});
arrayData = data;
print();
});
function print() {
console.log("done");
}
在控制台中,“完成”是最后写入的内容,即使我的 nbCinemas.js 文件中还有其他 console.log。
你能帮帮我吗?为什么我的 CSVParsing.js 文件最后加载?如何强制它加载 before nbCinemas.js?
谢谢!
汤姆。
【问题讨论】:
-
在 chrome 控制台中检查您的网络选项卡 - 它会显示每个 JS 的加载时间,您可以明确查看是否加载了最后一个内容
-
csv 函数正在加载异步数据。因此在您加载 nbCinemas.js 时它不可用
-
@TypedSource 好吧,我确定是因为这个......我们可以确保在加载 nbCinemas.js 时加载数据吗?
-
@TomFévrier 在第二个文件中创建一个事件侦听器,并在 csv 就绪状态下创建一个事件调用。如果事件被调用,则在事件侦听器上启动第二个脚本
标签: javascript global-variables order-of-execution