[英]Nodejs Listening to response stream on data event from http.get()
我正在研究Node.js。 为此,我正在使用有用的nodeschool.io研讨会。 我正在阅读learningyounode研讨会。
在http客户端和http收集部件中,我遇到了问题。 尽管我已经阅读了它们以及node.js上的api文档。 第一个挑战是; “将响应中的每个“数据”事件的字符串内容写入控制台上的新行(stdout)。 它在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()
完成执行,以便事件侦听器可用于response
对象触发的事件?
可以这样解释: http.get()为创建响应对象以进行服务器写操作并完成操作。 因此,它通过创建响应对象完成了工作,从现在开始,服务器可能会开始写入此响应流,并且回调已经进行,继续侦听响应流中服务器写入任何数据时触发的“数据”事件对此。 在逻辑上这是可能的。
这是称为流的node.js共同特征的示例。
Http.get
在调用回调之前完成执行(通过创建流)。 流仍在回调中处理。 http.get
的最终结果是流对象,该对象仍在更新,直到收到完整的响应。
考虑回调的方式不是作为父级执行完毕后执行的函数,而是作为另一个函数的参数的函数。 从理论上讲,没有什么可以阻止父级在其执行周期中的任何时间执行回调。 node.js中的约定恰好是在父对象完成之后执行回调。
您是正确的,将函数回调作为参数传递给函数http.get
,因此它可以访问在执行http.get
期间创建的响应对象。 但是,也正在发生的是,响应是一个流,这意味着它会不断更新直到完成。
这是操作顺序
http.get
调用外部资源。 http.get
将响应对象创建为流,并在数据来自外部资源时对其进行更新 这是创建流并将其传递给回调的函数的示例
function myAsyncFunction(callback){
var result = createStream(); // perform processing to create a streaming object
// at this point, the parent function is done so lets execute the callback
callback(result);
}
function processStream(example){
example.on('data', function(chunk){
console.log('chunk received' + chunk);
});
example.on('end', function(){
console.log('streaming is complete');
});
}
myAsyncFunction(processStream);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.