Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Nodejs正在侦听来自http.get()的数据事件的响应流_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript Nodejs正在侦听来自http.get()的数据事件的响应流

Javascript Nodejs正在侦听来自http.get()的数据事件的响应流,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我正在学习Node.js。为此,我使用了有用的nodeschool.io研讨会。我现在正在阅读learnyounode研讨会 在http客户端和http收集部分中,我遇到了一个问题。尽管我已经阅读了它们和node.js上的api文档。第一个挑战是,;将响应中每个数据事件的字符串内容写入控制台标准输出上的新行。。它在https收集部分中说,从服务器收集所有数据,而不仅仅是第一个数据事件。。。并引用第一个,因为它不收集所有数据。这不是一个 var allData = ""; response.set

我正在学习Node.js。为此,我使用了有用的nodeschool.io研讨会。我现在正在阅读learnyounode研讨会

在http客户端和http收集部分中,我遇到了一个问题。尽管我已经阅读了它们和node.js上的api文档。第一个挑战是,;将响应中每个数据事件的字符串内容写入控制台标准输出上的新行。。它在https收集部分中说,从服务器收集所有数据,而不仅仅是第一个数据事件。。。并引用第一个,因为它不收集所有数据。这不是一个

var allData = "";
response.setEncoding('utf8');
response.on('data', function(data){
    allData = concat(allData, data);
}
能够从响应中收集所有数据

就我到目前为止对异步性质的理解而言,在async 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完成并提供响应,因此http.get是异步的?如果是这样,则在触发事件时,该响应将在。。在它被创建之后,线路正在监听

侦听不是在创建响应时执行的连续进程吗?在这种情况下,回调不应等待http.get完成执行,以便事件侦听器可用于响应对象触发的事件


可以这样解释;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);

这是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);

allData的作用域不应该是callback.updated的本地范围。allData的作用域不应该是callback.updated的本地范围。因此,您的意思是函数callback不会像我在其他一些异步函数(如fs.r)中看到的那样,等待http.get完成
eaddir,在这种情况下,回调仅在fs.readdir完成读取后调用。区别是什么?什么时候知道这种情况?在这种情况下,http.get在调用回调之前完成执行。但是,http.get的最终结果是流对象,它在收到完整响应之前仍在更新。顺便说一句,考虑回调的方法不是将其视为在父函数执行完毕时执行的函数,而是将其视为另一个函数的参数。理论上,没有什么可以阻止父级在其执行周期的任何时候执行回调。node.js中的约定就是在父节点完成后执行回调。我明白了。用函数作为参数定义异步函数的人可以将要调用的回调参数不放在父函数定义的末尾,而是放在末尾上方的任何位置。不完全是这样。Http.get通过在调用回调之前创建流来完成执行。回调中仍在处理的是流。因此,您的意思是回调函数不会像我在其他一些异步函数(如fs.readdir)中看到的那样等待http.get完成,在这种情况下,回调函数只在fs.readdir完成读取后调用。区别是什么?什么时候知道这种情况?在这种情况下,http.get在调用回调之前完成执行。但是,http.get的最终结果是流对象,它在收到完整响应之前仍在更新。顺便说一句,考虑回调的方法不是将其视为在父函数执行完毕时执行的函数,而是将其视为另一个函数的参数。理论上,没有什么可以阻止父级在其执行周期的任何时候执行回调。node.js中的约定就是在父节点完成后执行回调。我明白了。用函数作为参数定义异步函数的人可以将要调用的回调参数不放在父函数定义的末尾,而是放在末尾上方的任何位置。不完全是这样。Http.get通过在调用回调之前创建流来完成执行。它是仍在回调中处理的流。