繁体   English   中英

Callback()节点Js

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM