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 instanceof,typeof的区别
Mar 24 Javascript
JS图片切换的具体方法(带缩略图版)
Nov 12 Javascript
jquery结合CSS使用validate实现漂亮的验证
Jan 29 Javascript
JQuery中Bind()事件用法分析
May 05 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
May 12 Javascript
微信小程序 页面传参实例详解
Nov 16 Javascript
javascript设计模式之模块模式学习笔记
Feb 15 Javascript
webpack学习--webpack经典7分钟入门教程
Jun 28 Javascript
Textarea输入字数限制实例(兼容iOS&安卓)
Jul 06 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
Nov 14 Javascript
玩转vue的slot内容分发
Sep 22 Javascript
5种方法告诉你如何使JavaScript 代码库更干净
Sep 15 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
PHP iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
PHP 生成N个不重复的随机数
2015/01/21 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
PHP多进程简单实例小结
2019/11/09 PHP
基于jquery的图片的切换(以数字的形式)
2011/02/14 Javascript
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
2016/05/25 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
2016/08/19 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
原生js通过一行代码实现简易轮播图
2019/06/05 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
python实现扫描日志关键字的示例
2018/04/28 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
2018/06/09 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
利用PyQt中的QThread类实现多线程
2020/02/18 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
Python如何实现爬取B站视频
2020/05/20 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
2014自荐信的写作技巧
2014/01/28 职场文书
《曹刿论战》教学反思
2014/03/02 职场文书
法人委托书范本
2014/04/04 职场文书
关于青春的演讲稿
2014/05/05 职场文书
前台岗位职责
2015/02/13 职场文书
JS数组的常用方法整理
2021/03/31 Javascript
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python