gpt4 book ai didi

javascript - 为什么从response.on ("end",回调)打印数据与从response.on ("data",回调)打印数据不同?

转载 作者:行者123 更新时间:2023-12-03 04:30:33 28 4
gpt4 key购买 nike

我正在研究 learnyounode 的 HTTP 客户端作业。

我想知道为什么控制台记录来自response.on(“end”,callback)的数据仅输出预期输出的最后一部分,而控制台记录来自response.on(“data”,callback)的数据输出整个回应。

这是我的前者代码:

var http=require("http");
http.get(process.argv[2], function(response){
var str;
response.setEncoding('utf-8');
response.on("error",function(error){
console.log(error);
});
response.on("data", function(data){
str=data;
});
response.on("end", function(){
console.log(str);
});

}).end();

结果显示:

                 ACTUAL                                 EXPECTED                
───────────────────────────────────────────────────────────────────────

"Veg out" != "Bodgy"
"" != "Chuck a sickie"
!= "Cook"
!= "Dag"
!= "Larrikin"
!= "Hit the turps"
!= "Counter meal"
!= "Hottie"
!= "Veg out"
!= ""

──────────────────────────────────────────────────────────────────────

response.on("data",callback) 的代码是这样的:

var http=require("http");
http.get(process.argv[2], function(response){
response.setEncoding('utf-8');
response.on("error",function(error){
console.log(error);
});
response.on("data", function(data){
console.log(data);
});


}).end();

结果是:

                 ACTUAL                                 EXPECTED                
────────────────────────────────────────────────────────────────────────────────

"Amber fluid" == "Amber fluid"
"Ankle biter" == "Ankle biter"
"Bities" == "Bities"
"Slabs" == "Slabs"
"Captain Cook" == "Captain Cook"
"Galah" == "Galah"
"Battler" == "Battler"
"Sickie" == "Sickie"
"Chook" == "Chook"
"Going off" == "Going off"
"" == ""

────────────────────────────────────────────────────────────────────────────────

前面的代码只记录最后一个元素。这是为什么?

谢谢!

最佳答案

这里有一篇关于 HTTP 请求如何工作的好读物 https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/

当你这样做时

response.on("data", function(data) {
str = data;
});

您将 str 的值替换为新的数据 block 。所以在结束时,你会这样做

response.on("end", function() {
console.log(str);
});

其中str表示最后接收到的数据 block 。您希望像这样连接所有收到的数据:

response.on("data", function(data) {
str += data;
});

关于javascript - 为什么从response.on ("end",回调)打印数据与从response.on ("data",回调)打印数据不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43510036/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com