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 相关文章推荐
不错的新闻标题颜色效果
Dec 10 Javascript
js实现正方形颜色从下往上升的效果
Aug 04 Javascript
JavaScript通过join函数连接数组里所有元素的方法
Mar 20 Javascript
js 截取或者替换字符串中的数字实现方法
Jun 13 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
Aug 18 Javascript
jQuery获取select选中的option的value值实现方法
Aug 29 Javascript
同步异步动态引入js文件的几种方法总结
Sep 23 Javascript
正则 js分转元带千分符号详解
Mar 08 Javascript
微信小程序搭建自己的Https服务器
May 02 Javascript
node解析修改nginx配置文件操作实例分析
Nov 06 Javascript
JS实现分页导航效果
Feb 19 Javascript
JavaScript 实现继承的几种方式
Feb 19 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
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
用javascript实现自定义标签
2007/05/08 Javascript
JavaScript语法着色引擎(demo及打包文件下载)
2007/06/13 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
2011/04/05 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
jQuery select表单提交省市区城市三级联动核心代码
2014/06/09 Javascript
PHP中CURL的几个经典应用实例
2015/01/23 Javascript
javascript的BOM
2016/05/03 Javascript
简单实现jQuery进度条轮播实例代码
2016/06/20 Javascript
javascript验证内容为数字以及长度为10的简单实例
2016/08/20 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
2018/04/12 Javascript
node puppeteer(headless chrome)实现网站登录
2018/05/09 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
Python XML RPC服务器端和客户端实例
2014/11/22 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
浅谈django 模型类使用save()方法的好处与注意事项
2020/03/28 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
大学生创业计划书的范文
2014/01/07 职场文书
幼儿园开学家长寄语
2014/01/19 职场文书
最新个人职业生涯规划书
2014/01/22 职场文书
服装设计师职业生涯规划范文
2014/02/28 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
python实现高效的遗传算法
2021/04/07 Python
MySQL注入基础练习
2021/05/30 MySQL
使用feign服务调用添加Header参数
2021/06/23 Java/Android
Go语言基础函数基本用法及示例详解
2021/11/17 Golang