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 相关文章推荐
setTimeout()递归调用不加引号出错的解决方法
Sep 05 Javascript
js判断鼠标左、中、右键哪个被点击的方法
Jan 27 Javascript
jQuery超简单选项卡完整实例
Sep 26 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
Dec 07 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
Dec 31 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
Feb 17 Javascript
jQuery实现下拉框功能实例代码
May 06 Javascript
jQuery实现图片向左向右切换效果的简单实例
May 18 Javascript
JS实现div模块的截图并下载功能
Oct 17 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
Sep 14 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
Jul 17 Javascript
如何在Vue项目中添加接口监听遮罩
Jan 25 Vue.js
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
体育彩票排列三组选三算法分享
2014/03/07 PHP
PHP实现自动登入google play下载app report的方法
2014/09/23 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
2011/10/13 Javascript
javascript读写json示例
2014/04/11 Javascript
jquery分割字符串的方法
2015/06/24 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
微信小程序中form 表单提交和取值实例详解
2017/04/20 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
vue中的inject学习教程
2019/04/24 Javascript
ES6小技巧之代替lodash
2019/06/07 Javascript
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
git进行版本控制心得详谈
2017/12/10 Python
python3爬取各类天气信息
2018/02/24 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
2020/01/03 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
keras 如何保存最佳的训练模型
2020/05/25 Python
美国电视购物:QVC
2017/02/06 全球购物
介绍一下grep命令的使用
2015/06/12 面试题
公司庆典活动邀请函
2014/01/09 职场文书
幼儿园教师国培感言
2014/02/02 职场文书
人事专员工作职责
2014/02/22 职场文书
婚前协议书范本两则
2014/10/16 职场文书
工会文体活动总结
2015/05/07 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js
用JS实现飞机大战小游戏
2021/06/09 Javascript