我理解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]#
因此我没有看到“利用事件循环”的“事件驱动的异步回调的概念”?
有谁可以帮我实现一些基本的例子?
答案 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
之前运行,这取决于时间问题,因为两者都没有做任何繁重的工作。