关于学习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
伴随着愈发红润的骄阳,火热而紧张刺激的五月悄然而至.这一个月以来,曾经让同学们“废寝忘食”的软工课大作业终于告一段落,每周一篇的读书笔记也缓到半月一篇,着实令人长吐一口气.但这一份表面的余裕当然没有看 ...
随机推荐
- adb删除系统软件
ZTE V970Android OS 4.1.2OS version: LeWa_13.04.03系统内存划分很小,才500M. 幸好开发者设置里面有一项:ROOT 授权管理adb root // 没 ...
- iOS开展block说明
源代码下载 浅谈block使用方法 对于block他用着确实方便,好多人都非常迷茫,这里写了一个Demo解说block的使用方法 好多人都觉得block是用于后一个界面向前一个界面传值用的,事实上更详 ...
- Method and system for public-key-based secure authentication to distributed legacy applications
A method, a system, an apparatus, and a computer program product are presented for an authentication ...
- Windows下一个curl使用
一.简介 在上一篇中我们涉及到了一个在Ubuntu下使用的curl命令,而且使用这个命令来模拟server的功能来向谷歌的C2DMserver发送数据. 以下简单的来说下在Windows下相同的使用c ...
- WPF 用代码增加路由事件的方法
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- WPF关于控件 父级控件,子级控件,控件模板中的控件,等之间的相互访问
原文:WPF关于控件 父级控件,子级控件,控件模板中的控件,等之间的相互访问 1,在菜单中访问 弹出菜单的控件 var mi = sender as MenuItem;//菜单条目 MenuItem ...
- Lambda表达式的参数捕获
以常用的Action委托为例: 有如下3个无参数的方法: public void Function() { //Do something } public void Function2() { //D ...
- FreeNAS 11.0 正式发布,提供 S3 兼容的对象存储服务
FreeNAS 11.0 正式版已发布,该版本带来了新的虚拟化和对象存储功能.FreeNAS 11.0 将 bhyve 虚拟机添加到其受欢迎的 SAN / NAS.Jail 和插件中,让用户可以在 F ...
- Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(无数截图)
[文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Window ...
- EPPlus导出两千万行记录到xlsx的c#代码
private void button5_Click(object sender, EventArgs e) { Stopwatch watch = new Stopwatch(); Backgrou ...