[英]Callback() Node Js
我对这个程序很困惑。 我买了Brad Dayley的一本书,叫做“ Node JS,MongoDB和AngularJS Web开发”。 我找到了一个演示闭包的程序,并以该程序为例。 这只是程序的第一部分。
function logCar(logMsg, callback){
process.nextTick(function(){
callback(logMsg);
});
}
var cars = ["Ferrari", "Porsche", "Bugatti"];
for(var idx in cars){
var message = "Saw a " + cars[idx];
logCar(message, function(){
console.log("Normal Callback: " + message);
})
}
我一直在试图弄清楚该程序在一个小时内如何工作,但是我无法弄清楚callback(logMsg)的功能。
我知道这可能是一个非常基本的问题,但是我无法解决这个问题。
回调是传递给logCar()的任何函数。 当logCar完成应做的工作时,它将调用回调函数。 在for循环中,您像这样调用logCar()。
logCar(message, function(){
console.log("Normal Callback: " + message);
})
在这里,function(){..}是回调函数,一旦logCar完成执行,它将被调用。 在这种情况下,您提供的回调函数将console.log
您作为第一个参数传递的消息。 您可能已经传递了另一个函数,该函数也会执行与回调不同的操作。
通过更紧密地遵循执行路径,尤其是logMsg所采用的路径,我发现这些更容易使我的头脑发around。 一个好的调试器对此非常有用。
在定义了名为message的变量的for循环之前,什么都没有发生。 一开始它将是“ Saw a Ferrari”。
不幸的是,“消息”旁边还有一个匿名函数,很难分离和定义。 因为它在其范围之外查找了一个名为“ message”的变量,该变量被困在for循环内,所以我们无法在第6行执行此操作:
var someFunction = function(){
console.log("Normal Callback: " + message);
}
...因为什么是“消息”? 该for循环之外的任何事物都不能直接访问“消息”(除了闭包外,但不必担心)。 请注意,此功能尚未执行。 这是在此时创建的。
因此,接下来执行LogCar("Saw a Ferrari", someFunction...)
。 LogCar在哪里? 哦,顶。 让我们跳到那里,为简单起见,让我们跳过process.nextTick。 本质上, someFunction("Saw a Ferrari")
发生在这里。 SomeFunction在哪里? 哦,那是尚未执行的匿名函数。 现在执行的时间到了。 因此,该过程跳回到那里,查看其中的内容并执行它,即console.log("Saw a Ferrari");
完成后,该过程将重复执行“ Saw a Porsche”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.