javascript异步编程
来源:互联网 发布:卖跑步装备的淘宝店 编辑:程序博客网 时间:2024/06/06 15:36
javascript的异步、同步、回调和时间循环等概念就不解释了,google一下,一大堆精品文章。这里简单记录一下javascript的异步编程常用套路。
就以nodejs的fs模块读取文件为例吧。
- fs同步读取文件
var fs = require("fs");var fileContent = fs.readFileSync('test.js','utf8');console.log(fileContent);console.log("something else");
- fs异步读取文件
var fs = require("fs");fs.readFile('async.js','utf8',function(err,data){ if(!err) { console.log(data); }});console.log("something else");
这个代码就是javascript中最原始的异步编程。用这种原始的方法会带来一些弊端,比如回调地狱。
为了让开发者能够优雅地写javascript代码,能工巧匠们发明了一下几种方法。
1. 将回掉函数抽离出来,也就是所谓的模块化
var fs = require("fs");fs.readFile('async.js','utf8',fileContent);function fileContent(err,data) { if(!err) { console.log(data); }}
这么干也有一个弊端,就是动不动就要为回掉函数命名,很是让人头疼,你懂的。
2. 使用generator
用generator“异步转同步”的典型当属tj大神的co库。看下面代码。
var fs = require('fs');var co = require('co');co(function* () { var file1 = yield readFile('demo.js'); console.log(file1); console.log("I am after file read even though its Async");});function readFile(filename) { return function(callback) { fs.readFile(filename, 'utf8', callback); };}
co用起来令人费解。
3. 实用promise
像q
, bluebird
这些库使用promise“碾平”了javascript回调函数带来的“金字塔”。
var Promise = require('bluebird'); // Converts all function of 'fs' into promises.var fs = Promise.promisifyAll(require('fs'));fs.readFileAsync('file.js','utf8').then(function(data) { console.log(data);}).catch(function(err) { console.log(err);});
promise很有前途。
4. 使用事件驱动(event-driven)
nodejs原生模块EventEmitter可以让开发者很方便地进行基于事件编程。
var EventEmitter = require('events').EventEmitter;var emitter = new EventEmitter();var fs = require('fs');// Event to read file - generic function.emitter.on('start_read',function(file_name) { console.log("Started Reading file....\n\n"); fs.readFile(file_name, 'utf8', function (err,data) { if (err) { console.log("Error happens."); } else { console.log("File data", data); } });});// Let's read some file.emitter.emit('start_read','env.json');emitter.emit('start_read','envConfig.js');
事件驱动,大材小用了。
5. 实用Async.js库
Async.js解决异步问题“爽的”没得说。看看github上到star数就知道它不是泛泛之辈。
0 0
- javascript 异步编程javascript
- javascript 异步编程
- javascript 异步编程2
- JavaScript异步编程
- JavaScript异步编程
- JavaScript异步编程
- javascript异步编程延伸
- javascript 异步编程
- Javascript异步编程
- JavaScript异步编程原理
- javascript 异步编程2
- JavaScript异步编程
- javascript 异步编程
- JavaScript 异步编程
- Javascript异步编程
- 探索Javascript异步编程
- javascript异步编程
- javascript异步编程实例
- 安卓手机屏幕同步工具asm.jar
- mongodb工具类
- noi2010能量采集(在网格点中互质的特点)
- 微信sdk的用法
- Data and Times
- javascript异步编程
- 软件开发者如何准备未来?
- MongoDB学习整理
- 3. ioctl
- java基础(七)/面向对像
- 长逻辑运算符和短逻辑运算符
- 220. Contains Duplicate III
- 原始套接字编程(1)
- matlab-线性代数 创建N阶单位矩阵