【发布时间】:2015-01-08 13:44:49
【问题描述】:
我正在学习 Node.js。为此,我正在使用有用的 nodeschool.io 研讨会。我现在正在阅读 learnyounode 研讨会。
在 http 客户端和 http collect 部分我遇到了问题。尽管我已经阅读了它们和 node.js 上的 api 文档。第一个挑战是; “将响应中每个“数据”事件的字符串内容写入控制台上的新行(标准输出)。”。它在 https 收集部分中说“从服务器收集所有数据(不仅仅是第一个“数据”事件)......”并参考第一个,因为它不收集所有数据。不是一个
var allData = "";
response.setEncoding('utf8');
response.on('data', function(data){
allData = concat(allData, data);
}
能够从响应中收集所有数据。
就我目前了解的异步性质而言,当异步http.get() 完成时,将调用以下第一个回调。或者我错了http.get() 不是异步的。
var http = require('http');
var urlString = process.argv[2];
http.get(urlString, function callback (response) {
response.setEncoding('utf8');
response.on('data', console.log);
response.on('error', console.error);
})
这段代码执行时会发生什么。回调是否等待http.get() 完成并提供response,所以http.get() 是异步的?如果是这样,则在创建 response.on(..) 行正在侦听的事件被触发时。
监听是不是在创建response时执行的连续过程,在这种情况下callback不应该等待http.get()完成执行,以便事件监听器可用于@触发的事件987654332@对象?
可以这样解释; http.get() 做了什么来创建一个响应对象到服务器写入并完成。所以它通过创建响应对象完成了它的工作,从现在开始,服务器可能会开始写入这个响应流,并且回调已经开始,在服务器写入任何位数据时监听“数据”事件的响应流给它。这在逻辑上是可能的。
【问题讨论】:
-
allData的范围不应是回调的本地范围。 -
相应更新。
标签: javascript node.js asynchronous