gpt4 book ai didi

javascript - 了解 Node.js 应用程序中的控制流

转载 作者:搜寻专家 更新时间:2023-11-01 00:43:02 25 4
gpt4 key购买 nike

我想了解 Node.js 应用程序中的控制流。一旦回调方法完成(就像递归调用中的回调堆栈),控制就会返回到原始函数。我编写了一个简单的程序来进行 GET 调用并返回数据。这是程序:

代码:

var async = require('async');
var http = require('http');

function getGoogleData(url, callback) {
http.get(url, function(response) {
if (response.statusCode == 200) {
var googleInfo = '';
response.on('data', function(chunk) {
console.log("receiving data... ");
googleInfo += chunk;
return;
});
response.on('end', function() {
console.log("End of data receive... ");
response.setEncoding('utf8');
return callback(null, googleInfo);
});
}
console.log("I am here but why!");
//callback(new Error("GET called failed status_code=" + response.statusCode));
});
console.log("Return from get google data");
}

async.waterfall([
function(callback) {
console.log("In func 1");
getGoogleData("http://www.google.com", callback);
},
function(data, callback) {
console.log("In func 2");
callback(data);
}],
function (err, res) {
console.log("In err fn");
});

这是程序的输出:输出:

In func 1
Return from get google data
I am here but why!
receiving data...
receiving data...
End of data receive...
In func 2
In err fn

谁能帮我理解为什么“我在这里,但为什么!”即使从“数据”事件发射器返回后,该行也会打印为控制台日志中的第二个输出行?这里的整体控制流程是什么?

最佳答案

您首先看到该消息的原因是 if block 中的代码所做的只是添加事件处理程序。在您的 console.log 已经执行之后,这些事件会在未来某个时间发出。

这与在请求完成之前打印“Return from get google data”的原因类似,因为 http 请求是异步的。

关于javascript - 了解 Node.js 应用程序中的控制流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28156886/

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