最近一直在研究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库,分模块化开发。

每天进步一点点,加油。

关于学习js的Promise的心得体会的更多相关文章

  1. 学习使用React Native的心得体会

    首先根据官网上的介绍,安装必须的环境需求.http://reactnative.cn/docs/0.20/getting-started.html#content 下面讲一下一些常用的命令: .下载n ...

  2. 微信小程序js学习心得体会

    微信小程序js学习心得体会 页面控制的bindtap和catchtap 用法,区别 <button id='123' data-userDate='100' bindtap='tabMessag ...

  3. 十天来学习java的心得体会

    有关学习java是几天来的心得体会: 十天学习java遇到很多问题,每个问题都是经过反复的看书本以及上网查找资料来解决的,发现这一点真的需要自己来而不是去遇到什么问题就去依靠他人(师兄.同学).在其中 ...

  4. Salty Fish 结对学习心得体会及创意照 (20165211 20165208)

    小组结对学习心得体会及创意照 在阅读了软件工程讲义 3 两人合作(2) 要会做汉堡包和现代软件工程讲义 3 结对编程和两人合作后,加之对于这几周组队学习的感悟,我们对于组队学习的一些感悟和想法如下: ...

  5. 从实例学习 Go 语言、"并发内容" 学习笔记及心得体会、Go指南

    第一轮学习 golang "并发内容" 学习笔记,Go指南练习题目解析.使用学习资料 <Go-zh/tour tour>.记录我认为会比较容易忘记的知识点,进行补充,整 ...

  6. 从实例学习 Go 语言、"基础与进阶" 学习笔记及心得体会、Go指南

    第一轮学习 golang "基础与进阶"学习笔记,Go指南练习题目解析.使用学习资料 <Go-zh/tour tour>.记录我认为会比较容易忘记的知识点,进行补充,整 ...

  7. AngularJS心得体会

    AngularJS早些时候有过了解,知道这是一个JS的MVC框架,同类型的框架还有Backbone等.这次是由于项目需要,学习了两天的Angular后开始着手改之前的项目代码,这里大概说一下这一周学习 ...

  8. AJAX重点知识的心得体会

    下面就为大家带来一篇 AJAX重点知识的心得体会.学习还是有点帮助的,给大家做个参考吧. AJAX是什么? 是Asynchronous Javascript And XML的首字母的缩写, 它不是一门 ...

  9. 软工-五月心得体会 PB16110698

    伴随着愈发红润的骄阳,火热而紧张刺激的五月悄然而至.这一个月以来,曾经让同学们“废寝忘食”的软工课大作业终于告一段落,每周一篇的读书笔记也缓到半月一篇,着实令人长吐一口气.但这一份表面的余裕当然没有看 ...

随机推荐

  1. 使用PLCcom.dll操作西门子系列PLC

    工作中经常需要了解plcdb块的数据!由于工作使用OPC类库进行通讯,开发,配置,使用都比较麻烦, 特在网上找到一个名为PLCcom.dll的类库,可以实现PLC读写操作,下面演示C#如何使用PLCc ...

  2. 继承之重写prototype

    function Ff(){} //undefined Ff.prototype={a:"ss"} //Object {a: "ss"} var f1= new ...

  3. 封装QtCore(在非Qt项目里使用QString,QJson,QFileInfo,QFile等类)

    单独封装QtCore 一直以来使用QT的特性使用惯了,很多东西QT都封装得很好.如果突然有一天,不使用QT开发了,是不是不习惯. 比如我们经常使用QString很多方法,string,wstring之 ...

  4. 【每日一句】make a scene

    scene有场面.场景的意思,只是make a scene可不是指做场面.scene还有还有一个意思,指很生气而大吵大闹(的情景),因此make a scene就是指某人情绪失控发脾气.如今一起从以下 ...

  5. PHP和MySQL Web开发 经典书籍

    <PHP和MySQL Web开发> PHP and MySQL Web Development“使用PHP和MySQL构建数据库驱动的Web应用程序的权威指南” 笔者推荐 PHP和MySQ ...

  6. 如何获得iframe中元素的值

    在Web开发时,很多时候会遇到一个问题.我在一个页面嵌入了iframe,并且我想获得这个iframe页面某个元素的值.那么该如何实现这个需求呢? 先来看下演示: 效果演示     iframe1中文本 ...

  7. ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 迁移数据 上一章节中我们配置了 ...

  8. ubuntu12.04单卡server(mentohust认证)再加上交换机做路由软件共享上网

    最近成立了实验室的网络环境中,通过交换机连接的所有主机实验室.想要一个通过该server(单卡)做网关,使用mentohust认证外网,然后内网中的其它主机通过此网关来连接外网. 1.首先在serve ...

  9. Android Fragment——详细解释

    1.Fragment概述 在一个Activity中. Fragment代表UI的一个部分或者一个行为.一个Activity能够结合多个Fragment对象,也能够在多个activity中使用同样Fra ...

  10. sql学习目录

    sql like N'%...%' 在C#里的写法 sql 循环 随机数创建数据 使用StringBuilder与SqlParameter 跨库查询数据 sql 多列求和 sql SCOPE_IDEN ...