node.js中使用q.js实现api的promise化


Posted in Javascript onSeptember 17, 2014

关于啥是promise以及promise解决的是啥问题,敬请体验node的回调异步编码大法,顺带移步http://wiki.commonjs.org/wiki/Promises/A 看看是咋定义的,在此不再赘述。

这里我们看看怎么用q.js 实现node api的promise。

一、万事开始皆为install

npm install q

二、标准node style api 的promise化方法

1、使用Q.nfcall

相对于Q.fcall ,Q.nfcall 就是node 的Q.fcall。

var FS = require('fs'),

    Q   = require('q'),

    colors = require('colors'),

    file = 'example.txt';

var fsReadFile = Q.nfcall(FS.readFile,file,encoding);

fsReadFile.then(function(result){

console.log((“invoke in nfcall ” + file).red);

console.log(result.green);

},function(error){

console.log(“invoke in nfcall”.red);

console.log(error.toString().red);

}

);

2、使用Q.denodeify

var fsReadFile_denodeify = Q.denodeify(FS.readFile);

 

fsReadFile_denodeify(file,encoding).then(function(result){

    console.log("invoke in denodeify".red);

    console.log(result.green)

},function(error){

    console.log("invoke in denodeify".red);

    console.log(error.toString().red);

}

);

3、使用Q.deferd

var fsReadFile_deferd = function(file,encoding){

    var deferred = Q.defer();

    FS.readFile(file,encoding,function(error,result){

    if(error){

        deferred.reject(error.toString().red);

    }

    deferred.resolve(result);

});

 

return deferred.promise;

};

 

fsReadFile_deferd(file).then(function(result){

    console.log("invoke in deferd".red);

    console.log(result.toString().green);

},function(error){

    console.log("invoke in deferd".red);

    console.log(error.toString().red);

}

);

4、使用makeNodeResolver()

var fsReadFile_makeNodeResolver = function(file,encoding){

    var deferred = Q.defer();

    FS.readFile(file,encoding,deferred.makeNodeResolver());

    return deferred.promise;

};

 

fsReadFile_makeNodeResolver(file,encoding).then(function(result){

    console.log("invoke in makeNodeResolver".red);

    console.log(result.green);

},function(error){

    console.log(error.toString().red);

});
Javascript 相关文章推荐
来自国外的页面JavaScript文件优化
Dec 08 Javascript
js 判断控件获得焦点的示例代码
Mar 04 Javascript
jQuery插件开发详细教程
Jun 06 Javascript
jquery无限级联下拉菜单简单实例演示
Nov 23 Javascript
学习JavaScript设计模式(封装)
Nov 26 Javascript
简单谈谈javascript中this的隐式绑定
Feb 22 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
Oct 27 Javascript
elementUI select组件默认选中效果实现的方法
Mar 25 Javascript
基于elementUI实现图片预览组件的示例代码
Mar 31 Javascript
Bootstrap实现省市区三级联动(亲测可用)
Jul 26 Javascript
基于canvasJS在PHP中制作动态图表
May 30 Javascript
js实现限定区域范围拖拉拽效果
Nov 20 Javascript
Javascript判断文件是否存在(客户端/服务器端)
Sep 16 #Javascript
ie8下修改input的type属性报错的解决方法
Sep 16 #Javascript
JavaScript函数定义的常见注意事项小结
Sep 16 #Javascript
JavaScript的各种常见函数定义方法
Sep 16 #Javascript
JavaScript中合并数组的N种方法
Sep 16 #Javascript
JavaScript的null和undefined区别示例介绍
Sep 15 #Javascript
JavaScript中变量声明有var和没var的区别示例介绍
Sep 15 #Javascript
You might like
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
2012/09/07 PHP
php解析xml方法实例详解
2015/05/12 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
解决layui弹出层layer的area过大被遮挡的问题
2019/09/21 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
JS实现超级好看的鼠标小尾巴特效
2020/12/01 Javascript
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
python对json的相关操作实例详解
2017/01/04 Python
使用Python实现windows下的抓包与解析
2018/01/15 Python
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
python实现随机调用一个浏览器打开网页
2018/04/21 Python
python-opencv颜色提取分割方法
2018/12/08 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
python 穷举指定长度的密码例子
2020/04/02 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
毕业证丢失证明
2014/01/15 职场文书
文明市民先进事迹
2014/05/15 职场文书
运动会闭幕式致辞
2015/07/29 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
一文了解MYSQL三大范式和表约束
2022/04/03 MySQL
吉利入股戴姆勒后smart“长大了”
2022/04/21 数码科技