2011-07-10 91 views
0
parseResponse = (response, cb) -> 
    output = '' 
    response.setEncoding('utf8') 
    response.on 'data', (chunk) -> output += chunk 
    response.on 'end', -> 
    j = JSON.parse(output) 
    result = j.results[0] 
    cb(result) 

我想知道这是干什么的,为什么它在我使用的模块中是必需的。传入的响应来自http get。这个函数在做什么?

由于

+0

你能发布JavaScript的等价物吗? – Blender

+0

我根本不知道脚本语言,但我猜测它会以UTF8编码数据的块形式读取响应,并在完成时调用变量cb中传递的回调函数,并生成JSON字符串 – mplungjan

回答

4

该功能处理的响应(在ClientResponse类的实例)通过HTTP被接收。

response.setEncoding('utf-8') 

指示期望的传输编码(UTF-8)。传递给data事件的块将以此编码发送。

response.on 'data', (chunk) -> output += chunk 

设置处理数据块的回调函数。收到的字符串的每个“块”都附加到output字符串变量中。

response.on 'end', -> 

设置另一个回调作用于完全传输的数据。

j = JSON.parse(output) 
result = j.results[0] 

接收到的数据被假定为JSON并被解析。解析数组的第一个元素被检索。

cb(result) 

回调cb原本提供给函数调用这些数据在JSON对象中找到。

+0

感谢Hans!为什么它需要完成?在解析之前响应的形式是什么?它只是接收需要放在一起的分块数据吗? – fancy

+0

在执行函数时,预计会有HTTP响应。它设置事件回调函数,这些函数将在数据流入时运行。我对HTTP/TCP知之甚少,但我猜测数据以原始二进制块的形式出现,并且设置所需的编码会告诉Node进行处理作为UTF-8字符串。 –

+0

你最后的断言是正确的。它通过string-chunk接收数据,string-chunk,并将每个片段累加到'output'变量中。它做了一些额外的处理,然后将数据交给它作为参数给出的回调。 –