console.log()作为response.on()中的回调

时间:2015-06-12 03:36:26

标签: javascript node.js

在下面的代码中,我使用node.js发出一个简单的get请求,并将响应记录到控制台。这完全没问题,但为什么呢? response.on部分发生了什么?为什么console.logconsole.error在没有参与任何论据的情况下工作

var http = require('http')
http.get('http://www.google.com/index.html', function (response) {
    response.setEncoding('utf8')
    response.on('data', console.log) // <---
    response.on('error', console.error) // <---
})

1 个答案:

答案 0 :(得分:1)

他们 接受参数。他们将参数视为response.on的回调为他们提供的内容。

将函数内联传递为匿名函数:

response.on('data', function(data){ // anonymous function passed inline
    console.log(data);
});

与在外面定义它们并将它们按名称

传递相同
...
response.on('data', callback)
...
function callback(data){ // < named function defined outside
    console.log(data);
}    

基本上你所做的是你采用了整个内联函数,在外面定义它,并给它起了一个名字callback。然后你通过这个名称作为参数传递它,你先前在其中定义了整个函数内联 (这也是IMO的一个更好的做法。特别是如果你发现你自己将内联函数传递到一个以上的级别,你可以得到严重的回调地狱问题。(more info))

类似地,console.log也是(命名)函数,因此您也可以将其作为参数传递:

response.on('data', console.log)
相关问题