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 相关文章推荐
仿微博字符限制效果实现代码
Apr 20 Javascript
js修改地址栏URL参数解决url参数问题
Dec 15 Javascript
jQuery事件绑定.on()简要概述及应用
Feb 07 Javascript
jquery实现控制表格行高亮实例
Jun 05 Javascript
js实现的常用的左侧导航效果
Oct 17 Javascript
Javascript核心读书有感之语句
Feb 11 Javascript
微信小程序 loading(加载中提示框)实例
Oct 28 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
Apr 17 jQuery
微信小程序 刷新上拉下拉不会断详细介绍
May 11 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
Sep 18 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
Nov 22 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
Jul 13 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读取目录下所有文件的代码
2008/01/07 PHP
ThinkPHP3.1新特性之命名范围的使用
2014/06/19 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
详解PHP字符串替换str_replace()函数四种用法
2017/10/13 PHP
jquery tools之tooltip
2009/07/25 Javascript
利用jQuery的$.event.fix函数统一浏览器event事件处理
2009/12/21 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
2016/03/28 Javascript
Actionscript与javascript交互实例程序(修改)
2016/09/22 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
element-ui表格数据转换的示例代码
2018/08/24 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
Python实现网站注册验证码生成类
2017/06/08 Python
python爬虫 基于requests模块的get请求实现详解
2019/08/20 Python
python生成器推导式用法简单示例
2019/10/08 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
学校招生宣传广告词
2014/03/19 职场文书
经贸专业毕业生求职信
2014/03/23 职场文书
《画风》教学反思
2014/04/16 职场文书
美术专业自荐信
2014/07/07 职场文书
优秀党支部申报材料
2014/12/24 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
李强优秀员工观后感
2015/06/16 职场文书
听证会主持词
2015/07/03 职场文书
青年文明号创建口号大全
2015/12/25 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技