最近一直在研究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. TCP/IP协议族(一)

    TCP/IP协议族(一) HTTP简介.请求方法与响应状态码 接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的. ...

  2. RadioButton分组的实现

    原文:RadioButton分组的实现     XAML如下 <StackPanel> <RadioButton GroupName="colorgrp"> ...

  3. March 29th, 2015, Thread Name is odd by increasing 1

    public class Fabric extends Thread{ public static void main(String args[]){ Thread t = new Thread(ne ...

  4. java中用反射访问私有方法和私有成员[转]

    转自: http://zhouyangchenrui.iteye.com/blog/470521 java的反射可以绕过访问权限,访问到类的私有方法和成员.可能这点会引起安全性的讨论.反射的使用帮助解 ...

  5. Flask框架2

    Flask框架的学习与实战(二):实战小项目   昨天写了一篇flask开发环境搭建,今天继续,进行一个实战小项目-blog系统. blog系统很简单,只有一个页面,然后麻雀虽小五脏俱全.这里目的不是 ...

  6. python 教程 第二十二章、 其它应用

    第二十二章. 其它应用 1)    Web服务 ##代码 s 000063.SZ ##开盘 o 26.60 ##最高 h 27.05 ##最低 g 26.52 ##最新 l1 26.66 ##涨跌 c ...

  7. tornado+ansible+twisted+mongodb操作和维护系统开发自己主动(一个)

    前段时间去了解ansible配置管理(http://blog.csdn.net/column/details/ansible.html   anisble配置工具盒翻译),我感觉很强烈,认为短期内to ...

  8. 手把手教你开发Nginx模块

    前面的哪些话 关于Nginx模块开发的博客资料,网上很多,很多.但是,每篇博客都只提要点,无法"step by step"照着做,对于初次接触Nginx开发的同学,只能像只盲目的蚂 ...

  9. Touch panel DTS 分析(MSM8994平台,Atmel 芯片)

    Touch panel DTS 分析(MSM8994平台,Atmel 芯片) 在MSM8994平台,Touch panel的DTS写节点/kernel/arch/arm/boot/dts/qcom/m ...

  10. UWP 裁切 SoftwareBitmap

    //设置源图ImageSource为WriteableBitmap类型 BitmapImage himage = this.imageTarget2.Source as BitmapImage; Ra ...