Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 逐步执行代码(同步)_Function_Call_Execution_Synchronous - Fatal编程技术网

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);
        }
    });
}