我需要得到这个叫做地图的算法的结果。这个结果是异步的,这就是它不能使用定义全局变量的原因。我需要得到生成以下内容的json对象:"features.features“。
d3.json ("mapaoriginal.topojson" function (topology) {
var = cartogram features (topology, topology.objects.collection.geometries);
d3.select ("SVG")
.attr ("width", 1000)
.attr ("height", 500)
.selectAll ("path")
.data (features.features)
.enter ()
.append ("path")
.attr ("d" cartogram.path);
})我的想法是拥有一些东西。
result = features.features;然后在函数之外使用“结果”。如果我定义了一个全局变量,它总是显示为未定义的。我怎么才能摆脱我所需要的功能?
发布于 2015-09-01 22:19:00
假设是异步的是d3.json,而不是地图。如果制图是异步的,则必须检查文档/代码,以确定是否有一种方法可以在操作完成时提供回调函数(否则,如果可以使用setInterval定期检查操作是否完成,则必须使用全局事件处理程序-除非没有其他选择)。
然后在函数外使用“结果”。
只有在异步操作完成后才初始化result。因此,如果要获取值,则必须等待回调(函数)开始执行。
如果我定义了一个全局变量,它总是显示为未定义的。我怎么才能摆脱我所需要的功能?
您可以定义一个单独的函数来执行您想用features.features做的事情,并在回调中调用它。这将有助于将代码行保留在回调函数之外。
有点像
d3.json ("mapaoriginal.topojson" function (topology) {
// do current stuff
// myFunction(features.features) that uses features.features
})
function myFunction(f) {
// do stuff with f (features.features)
}还有一种方法是使用全局偶数处理程序侦听JSON响应,或者定期设置setInterval以检查全局变量值--但是,这几乎总是导致难以维护代码,因此不建议这样做。
https://stackoverflow.com/questions/32341028
复制相似问题