最近一直在研究js的Promise对象,其中有一篇blog写得比较通俗易懂,转发如下:
http://www.cnblogs.com/lvdabao/p/es6-promise-1.html
参照上面描述的自己写了测试例子,明白了Promise的用法,然后自己写了个fs的Promise的例子,代码如下:
var fs=require('fs');
function readFile(){
let readP=new Promise(function(success,fail){
fs.readFile('./main.js',function(err,data){
if(err){
fail(err);
}
success(data.toString());
}); });
return readP;
} function readFile2(){
let readP=new Promise(function(success,fail){
fs.readFile('./Person.js',function(err,data){
if(err){
fail(err);
}
success(data.toString());
}); });
return readP;
} function readFile3(fileName){
let readP=new Promise(function(success,fail){
fs.readFile('./'+fileName,function(err,data){
if(err){
fail(err);
}
success(data.toString());
}); });
return readP;
} var content=''; /*readFile().then(function(data){
//console.log(data.toString());
content=data.toString();
return readFile2();
}).then(function(data){
content+='\n-------------Person.js------------\n';
content+=data.toString();
console.log(content);
});*/ readFile3('main.js').then(function(data){
content=data.toString();
return readFile3('Person.js');
}).then(function(data){
content+='\n-------------Person.js------------\n';
content+=data.toString();
console.log(content);
});
这个是刚学Promise的第一个自己写的代码,继续深入,挖掘Promise的特性,又参考了这篇问答blog,地址如下:
”关于mongoose结合promise的问题”
https://cnodejs.org/topic/55efda46dceb7e671ee08bcb
参考了人家的代码,又写了个2.0的代码,改造代码如下:主要是采用了co库和yield特性
var fs=require('fs');
var co=require('co'); function readFile3(fileName){
let readP=new Promise(function(success,fail){
fs.readFile('./'+fileName,function(err,data){
if(err){
fail(err);
}
success(data.toString());
}); });
return readP;
} var content=''; co(function *() {
let file1 = yield readFile3('main.js');
let file2 = yield readFile3('Person.js'); // 这里处理file1, file2, file3
console.log(file1);
console.log('\n ok-------------Person.js------------ ok \n');
console.log(file2); });
后来,根据模块化,改造了上面的代码,主要是把读取文件的业务逻辑抽离出来:
fsmodule.js的代码
var fs=require('fs'); function readFile3(fileName){
let readP=new Promise(function(success,fail){
fs.readFile('./'+fileName,function(err,data){
if(err){
fail(err);
}
success(data.toString());
}); });
return readP;
} module.exports=readFile3;
fspromise3.js的代码:
var fs=require('fs');
var co=require('co');
var fsmodule=require('./fsmodule'); co(function *() {
let file1 = yield fsmodule('main.js');
let file2 = yield fsmodule('Person.js'); // 这里处理file1, file2, file3
console.log(file1);
console.log('\n ok-------------Person.js------------ ok \n');
console.log(file2); });
总结如下:对Promise有了认识,然后学习了yield和co库,分模块化开发。
每天进步一点点,加油。