function tempUpdates()
{
getData(callbackID, "cabinetTemp", function(callback){
var currentTemp = convertBinary(callback);
for(var i = 0; i < tempUpdateList.length: i++)
{
tempUpdateList[i].innerHTML = currentTemp;
}
})
}
我不会介绍每个功能,但我想知道......
回调什么时候实际执行?它是在循环完成后吗? (这是我怀疑的。)
仅在循环完成后加载currentTemp
变量?
答案 0 :(得分:1)
只要初始函数完成其工作并决定调用它,就会调用回调函数。在您的示例中,它与for循环无关。这完全是回调的一部分。它位于回调内部,因此只要回调函数运行,它就会运行,反之亦然。
似乎getData是一个AJAX函数。所以它的作用基本上是从服务器获取数据,并在完成后调用回调。 getData方法本身是通用的。所有这一切都是它在锡上所说的 - 得到一些数据。程序员决定对数据做什么并不是它的关注点。它只是等待服务器发回数据,当它准备就绪时,它会调用回调,以便IT(也就是你,程序员在那里添加的功能)根据收到的数据执行特定于应用程序的内容。
假设getData函数的行为如下:
它不仅仅是AJAX或JavaScript。从理论上讲,这是一个接收回调作为参数的函数,几乎只是在完成其工作后立即调用函数。通常它是某种类型的动作,应该在之后发生第一个函数(在我们的例子中是getData)完成它的工作(比如getData获取数据)。
答案 1 :(得分:0)
var currentTemp = convertBinary(callback)
回调正在发送给convertBinary
。它的运行取决于该功能的作用。除非convertBinary
使用超时(或运行另一个异步函数,如AJAX),否则回调将在循环开始之前运行。
currentTemp
返回一个在循环开始之前发生的值时, convertBinary
被“加载”。循环似乎将各种HTML元素设置为currentTemp
的值。
显然,在getData
调用函数(并将其传递给回调函数)之前,这些都不会运行。
答案 2 :(得分:0)
没有任何背景,很难说。如果您在执行回调时非常好奇,那么您应该尝试调试代码。您可以添加一些日志记录,这样您就可以看到执行的顺序,或者更好的是,在传递给getData的匿名函数中设置一个断点,并查看堆栈的样子。
获得一些洞察力的最简单方法是使用一些简单的console.log(“描述当前状态的一些有意义的字符串”);调用,但调试是一种更强大的技术。如果你正在使用webkit浏览器(chrome,safari),它就是内置的。Firefox有一个很棒的firebug插件,可以让你调试javascript。我不确定调试node.js的当前技术水平,但可能有一个模块你可以在那里使用。