Function 逐步执行代码(同步)
我的Function 逐步执行代码(同步),function,call,execution,synchronous,Function,Call,Execution,Synchronous,我的index.html中只有两行代码(见下文)。我想在执行第二行之前先执行第一行。我如何做到/确保这一点?目前,dataDB的控制台中将显示“undefined”,因为函数getDataFunction()需要一些时间 var dataDB = getDataFunction(afterDate, toDate, afterTime, toTime); console.log("Content of dataDB: " + dataDB); 对你来说可能是个简单的问题:-)我感谢你的帮助 更
index.html
中只有两行代码(见下文)。我想在执行第二行之前先执行第一行。我如何做到/确保这一点?目前,dataDB
的控制台中将显示“undefined”,因为函数getDataFunction()需要一些时间
var dataDB = getDataFunction(afterDate, toDate, afterTime, toTime);
console.log("Content of dataDB: " + dataDB);
对你来说可能是个简单的问题:-)我感谢你的帮助
更新:getDataFunction()
此函数只需从带有d3(数据驱动文档)的服务器获取一些数据(collection+json)…这些参数用于标识感兴趣的数据(时间范围)
它说,在api引用中,post确实是非同步完成的,因此剩余代码的执行(在本例中为console.log)没有合适的方法让javascript等待。最好的办法是重新设计它,使回调函数能够处理接下来需要处理的任何事情。可能与getDataFunction的内容有关。你需要提供更多关于你在那里做什么的信息。可能是一个设置为异步的ajax调用。它将解释这种行为。正如您在上面看到的,我已经用关于getDataFunction()的附加信息更新了原始问题。好的,我明白了。如果我执行
console.log(“dataDB的内容:+dataDB”)
在函数的else语句中,它起作用。我应该如何在回调函数中重新设计它?你有什么想法吗?谢谢问题是d3.json调用是异步执行的。因此,调用将执行,当awnser运行时,您创建的回调函数(if/else)将被执行。由于异步特性,它将在后台开始执行此操作,其余代码将在json调用仍在执行时执行(因此是未定义的日志消息)。因此,无论您接下来想做什么,都必须在回调函数中启动它,因为没有合适的方法让javascript等待它。您可以做的是在回调中放入一个函数调用,以便在需要等待的情况下启动下一个回调。
function getDataFunction(afterDate, toDate, afterTime, toTime){
d3.json("http://server...", function(error, data){
if(error) {
console.log(error);
} else {
console.log(data);
dataDB = data.collection.items;
console.log(dataDB);
}
});
}