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注入技巧
Jun 22 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
Oct 15 Javascript
jQuery中die()方法用法实例
Jan 19 Javascript
js禁止页面刷新与后退的方法
Jun 08 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
Nov 04 Javascript
js+div+css下拉导航菜单完整代码分享
Dec 28 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
Mar 05 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
Dec 13 Javascript
详解puppeteer使用代理
Dec 27 Javascript
vue集成kindeditor富文本的实现示例代码
Jun 07 Javascript
js+canvas实现纸牌游戏
Mar 16 Javascript
Openlayers学习之加载鹰眼控件
Sep 28 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 Class&Object -- PHP 自排序二叉树的深入解析
2013/06/25 PHP
ThinkPHP模板判断输出Present标签用法详解
2014/06/30 PHP
php session 写入数据库
2016/02/13 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
php的4种常用运行方式详解
2016/12/22 PHP
PHP simplexml_import_dom()函数讲解
2019/02/03 PHP
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
基于jquery1.4.2的仿flash超炫焦点图播放效果
2010/04/20 Javascript
Javascript简单改变表单元素背景的方法
2015/07/15 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
JS中使用apply、bind实现为函数或者类传入动态个数的参数
2016/04/26 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
javascript中正则表达式语法详解
2020/08/07 Javascript
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
python实现字符串和数字拼接
2020/03/02 Python
Keras - GPU ID 和显存占用设定步骤
2020/06/22 Python
python与pycharm有何区别
2020/07/01 Python
Python 保存加载mat格式文件的示例代码
2020/08/04 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
ET Mall东森购物网:东森严选
2017/03/06 全球购物
研究生求职推荐信范文
2013/11/30 职场文书
公司口号大全
2014/06/11 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
2014年纪检工作总结
2014/11/12 职场文书
课堂打架检讨书200字
2014/11/21 职场文书
2014年服务员个人工作总结
2014/12/23 职场文书
幼儿园个人师德总结
2015/02/06 职场文书
解决Vue+SpringBoot+Shiro跨域问题
2021/06/09 Vue.js