了解 Node.js 应用程序中的控制流
Understanding control flow in Node.js applications
我正在尝试了解 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
块中的代码所做的只是添加事件处理程序。这些事件会在将来的某个时间发出,在您的console.log
已经执行之后。
这与在请求完成之前打印"从获取谷歌数据返回"的原因类似,因为 http 请求是异步的。
相关文章:
- 三星智能电视应用程序;Brightcove示例应用程序远程控制问题
- 我如何知道js文件之间的javascript应用程序代码流
- 应用程序在“关闭”之后停止工作(控制台中没有错误);咕哝的构造”;
- 量角器 iOS 自动化:茉莉花规范超时.重置 Web 驱动程序控制流
- 控制node.js应用程序's通过外部网站举办的活动
- 如何在Java web应用程序中自动控制静态文件(css、js、image)的版本
- 使用JavaScript控制iOS网络应用程序中列表的垂直滚动和水平滑动
- 了解 Node.js 应用程序中的控制流
- 模态对话框加载 jquery 在控制台中执行,但不从应用程序加载.js
- 如何在流打开时保持节点应用程序运行
- 如何在JMVC/Can.js中处理应用程序的版本控制
- 从phonegap应用程序中的本地xml文件输入流
- 如何使用来自 IP 网络摄像头应用程序的 jpeg 流作为 html5 视频标签中的 src
- 如何在Ratchet's的聊天应用程序,而不是控制台上的文本框
- 类似于后退按钮流的应用程序,导航栏中有后退按钮
- 使AJAX应用程序在没有后端控制的情况下可爬网
- 最佳实践:重构移动应用程序(JS、jquery、PHP)的工作流
- 公共Web应用程序的访问控制或加密
- Ionic应用程序和服务器帖子:访问控制允许来源
- Git:如何在目录结构方面分离后端Rest Api和前端应用程序的版本控制