Node.js - 执行传递给另一个函数的匿名函数

时间:2012-09-29 09:04:37

标签: node.js

我理解Node.js通过利用事件循环具有事件驱动的异步回调的概念。

database.query("SELECT * FROM hugetable", function(rows) { var result = rows; });
console.log("Hello World");

这里,我们不是期望database.query()直接将结果返回给我们,而是传递第二个参数,一个匿名函数。 现在,Node.js可以异步处理数据库请求。如果database.query()是异步库的一部分,那么Node.js就是这样做的:就像以前一样,它接受查询并将其发送到数据库。但它不是等待它完成,而是做了一个心理记录,说“当在未来的某个时刻数据库服务器完成并发送查询结果时,我必须执行传递给的匿名函数database.query()。“

我正在尝试使用示例代码(因为我是新手,直到Node.js数据库交互才达到):

[root@example]# cat server8.js
function myfun(noparm , afterend)
{
         for ( var i =0; i < 10; i ++)
                console.log("The valus is " + i);
}

function mynextfn()
{
        console.log("Hello World");
}
function afterend()
{
        console.log("Hello afterend");
}

myfun(0, afterend);
mynextfn();
[root@idc-bldtool01 example]# node server8.js
The valus is 0
The valus is 1
The valus is 2
The valus is 3
The valus is 4
The valus is 5
The valus is 6
The valus is 7
The valus is 8
The valus is 9
Hello World
[root@iexample]#

因此我没有看到“利用事件循环”的“事件驱动的异步回调的概念”?

有谁可以帮我实现一些基本的例子?

1 个答案:

答案 0 :(得分:0)

您将afterend函数作为参数传递,但您从不调用它。

您的函数myfun必须是:

function myfun(noparm , afterend)
{
  for (var i = 0; i < 10; i++) {
    console.log("The valus is " + i);
  }
  afterend();
}

那么你期望会发生什么; - )

而且:第二件事是你的myfun函数是完全同步的。因此,Node.js无法在mynextfn函数的内容之前运行myfun

潜在afterend将在myfun之前运行,这取决于时间问题,因为两者都没有做任何繁重的工作。