我刚刚开始学习node.js和express,在express.js网站上的“ hello world”示例中有些让我感到困惑的地方。在示例中,它们引用回调函数中的服务器变量。
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('App listening at http://%s:%s', host, port);
});
app.listen()
在执行回调函数之前,是否向服务器变量返回值?它如何做到这一点以及如何运作?节点(和javascript)中的所有回调函数都一样吗?
我只想简单地解释执行过程。
需要明确的是,我知道回调函数可以访问服务器变量。但是,如果app.listen方法在向服务器变量返回值之前执行了回调函数,这是否意味着当您尝试访问server.adress()时,服务器变量的定义仍然不足?那是我不明白的。
app.listen()在执行回调函数之前是否向服务器变量返回值?
对,就是这样。app.listen()
类似于普通的Node.jsserver.listen
方法。回调是为服务器分配listening
事件侦听器的快捷方式。
您可以使用以下代码执行相同的操作:
var server = app.listen( 3000 );
server.on( "listening", function () {
console.log( "server is listening in port 3000" );
});
它如何做到这一点以及如何运作?节点(和javascript)中的所有回调函数都一样吗?
之所以会发生这种情况,是因为Node.js中的IO事件都是异步运行的(fs
模块例外)-也就是说,它们只会在其他同步代码运行完毕后才会发生。
这个数据与在浏览器JS -如果你运行一些JS进程同步,触发的事件(如click
,blur
等)将是一个完成后只执行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句