关于学习js的Promise的心得体会
最近一直在研究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的心得体会的更多相关文章
- 学习使用React Native的心得体会
首先根据官网上的介绍,安装必须的环境需求.http://reactnative.cn/docs/0.20/getting-started.html#content 下面讲一下一些常用的命令: .下载n ...
- 微信小程序js学习心得体会
微信小程序js学习心得体会 页面控制的bindtap和catchtap 用法,区别 <button id='123' data-userDate='100' bindtap='tabMessag ...
- 十天来学习java的心得体会
有关学习java是几天来的心得体会: 十天学习java遇到很多问题,每个问题都是经过反复的看书本以及上网查找资料来解决的,发现这一点真的需要自己来而不是去遇到什么问题就去依靠他人(师兄.同学).在其中 ...
- Salty Fish 结对学习心得体会及创意照 (20165211 20165208)
小组结对学习心得体会及创意照 在阅读了软件工程讲义 3 两人合作(2) 要会做汉堡包和现代软件工程讲义 3 结对编程和两人合作后,加之对于这几周组队学习的感悟,我们对于组队学习的一些感悟和想法如下: ...
- 从实例学习 Go 语言、"并发内容" 学习笔记及心得体会、Go指南
第一轮学习 golang "并发内容" 学习笔记,Go指南练习题目解析.使用学习资料 <Go-zh/tour tour>.记录我认为会比较容易忘记的知识点,进行补充,整 ...
- 从实例学习 Go 语言、"基础与进阶" 学习笔记及心得体会、Go指南
第一轮学习 golang "基础与进阶"学习笔记,Go指南练习题目解析.使用学习资料 <Go-zh/tour tour>.记录我认为会比较容易忘记的知识点,进行补充,整 ...
- AngularJS心得体会
AngularJS早些时候有过了解,知道这是一个JS的MVC框架,同类型的框架还有Backbone等.这次是由于项目需要,学习了两天的Angular后开始着手改之前的项目代码,这里大概说一下这一周学习 ...
- AJAX重点知识的心得体会
下面就为大家带来一篇 AJAX重点知识的心得体会.学习还是有点帮助的,给大家做个参考吧. AJAX是什么? 是Asynchronous Javascript And XML的首字母的缩写, 它不是一门 ...
- 软工-五月心得体会 PB16110698
伴随着愈发红润的骄阳,火热而紧张刺激的五月悄然而至.这一个月以来,曾经让同学们“废寝忘食”的软工课大作业终于告一段落,每周一篇的读书笔记也缓到半月一篇,着实令人长吐一口气.但这一份表面的余裕当然没有看 ...
随机推荐
- Leetcode 238 Product of Array Except Self 递推
给出一个数组 nums[i](i = 0,1,...,n-1) 输出数组output[i]满足 output[i] = nums[0] * num[1] * num[2] *..*num[i-1] ...
- Akka边学边写(1)-- Hello, World!
Akka Akka是什么呢?直接引用Akka站点上面的描写叙述吧: Akka is a toolkit and runtime for building highly concurrent, dist ...
- Linux性能测试 strace命令
1 功能说明 strace 命令是一种强大的工具 , 能够显示任何由用户空间程式发出的系统调用 . strace 显示这些调用的参数并返回符号形式的值 . strace 从内核接收信息 , ...
- ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 迁移数据 上一章节中我们配置了 ...
- latex 矩阵分块(block matrix)
Lesson 12: Making Block Matrices in LATEX 按列分块: [AAb⋯An−1b] $$ \left[ \begin{array}{c|c|c|c} A & ...
- C# WPF报表打印
前天我的一个同学由于打印报表而苦恼,所以就介绍了一下WPF的打印报表,希望能帮助到大家. 展示报表 1. 首先新建项“报表”,选定项目,右击,点击“添加”->“新建项”->“报表”
- log4net使用记录
1.在程序中引用log4net.dll 2.添加-新建配置文件Log4Net.config,并在文件属性中“复制到输出目录”选中“始终复制”,文件内容如下: <?xml version=&quo ...
- Angular语法(一)——展示数据
双花括号{{}} 展示数据 title = 'Tour of Heroes'; myHero = 'Windstorm'; <h1>{{title}}</h1> <h2& ...
- Angular常用指令
安装Node 先去Node官网下载并安装Node.js Install the Angular CLI(安装Angular CLI) npm install -g @angular/cli Creat ...
- jquery动态创建元素
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...