Node.js中的异步执行
来源:互联网 发布:工资条的制作app软件 编辑:程序博客网 时间:2024/06/08 08:32
刚看了一点马丁的《代码整洁之道》,于是心血来潮想把这几天做的Node联系进行一番代码重构,心里默念,高内聚低耦合,函数简洁明了,etc…
于是,在这段要读取本地文件内容的代码中,我将createServer后的回调printFile以及readFile后的回调getData都准备抽出来,并打算通过赋值的方式获取fileData,并最终将fileData打印到页面,代码如下:
//print_local_file.jsvar http = require("http");var fs = require("fs");var fileData = "";function getData(err, data) { if (err) { throw err; } // 操作data fileData = data; console.log(fileData);}function printFile(req, res) { console.log("server started"); fs.readFile("text.txt", getData); res.writeHead(200, { "Content-Type": "text/plain" }); res.write(fileData); res.end()}http.createServer(printFile).listen(8888);
结果,getData中的console.log(fileData)还没执行完就直接报错:
这让人反思:
getData还没有执行就去执行了res.write
看来不能这样写,目前是没有办法把函数抽出来了,只能乖乖的用异步了:
function printFile(req, res) { console.log("server started"); fs.readFile("text.txt", function(err,data){ res.writeHead(200, { "Content-Type": "text/plain" }); res.write(fileData.toString()); res.end() });}
据说,Node.js提供了一种机制可以进行异步控制,叫做promise,稍后会去学!
ps:fs.readFileSync是fs.readFile的同步版本,读取到的文件内容会以函数返回值的形式返回。
所以,可以这样写:
function printFile(req, res) { console.log("server started"); var fileData = fs.readFileSync("text.txt", "utf-8"); res.writeHead(200, { "Content-Type": "text/plain" }); res.write(fileData); res.end()}http.createServer(printFile).listen(8888);
0 0
- Node.js中的异步执行
- 关于node.js中的异步流程控制
- node.js中的异步while循环等待
- node js 异步执行流程控制模块Async介绍
- Node js 异步执行流程控制模块Async compose
- node js 异步执行流程控制模块Async介绍
- node js 异步执行流程控制模块Async介绍
- node.js异步编程
- Node.js 异步编程
- Node.js 异步编程
- node中的异步操作
- node中的异步
- JS异步执行
- js异步执行
- js异步执行机制
- node.js 的异步模型
- node.js 之异步篇
- Node.js入门:异步IO
- Android_FontMetrics
- JavaScript介绍
- oracle数据库的夺标查询
- Android算法面试题(1)
- js 正则表达式 要求密码的格式为6-12位,只能是字母、数字和下划线
- Node.js中的异步执行
- linux下读取以太网mac地址:
- Java注解教程及自定义注解
- 如何解决软键盘弹出引起的各种不适
- 3.12、BI之SSIS之数据流(源-目标-连接)
- 配置Ubuntu samba服务
- 我的完美主义思考
- Odoo Export for Admin
- QT的事件系统