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 相关文章推荐
可以支持多中格式的JS键盘
May 02 Javascript
JQuery 文本框使用小结
May 22 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
Dec 30 Javascript
JavaScript打开word文档的实现代码(c#)
Apr 16 Javascript
TypeScript具有的几个不同特质
Apr 07 Javascript
jQuery实现弹窗居中效果类似alert()
Feb 27 Javascript
Vue页面骨架屏注入方法
May 13 Javascript
js 数组详细操作方法及解析合集
Jun 01 Javascript
vue.js 实现输入框动态添加功能
Jun 25 Javascript
在vue中使用echarts图表实例代码详解
Oct 22 Javascript
VSCode 配置uni-app的方法
Jul 11 Javascript
JavaScript 原型与原型链详情
Nov 02 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
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
PHP导出带样式的Excel示例代码
2016/08/28 PHP
js检测客户端不是firefox则提示下载
2007/04/07 Javascript
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
js实现右键菜单功能
2016/11/28 Javascript
Bootstarp 基础教程之表单部分实例代码
2017/02/03 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
python去除所有html标签的方法
2015/05/05 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
Python基础之条件控制操作示例【if语句】
2019/03/23 Python
如何使用Python自动控制windows桌面
2019/07/11 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
简单介绍django提供的加密算法
2019/12/18 Python
Python sep参数使用方法详解
2020/02/12 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
澳大利亚有机化妆品网上商店:The Well Store
2020/02/20 全球购物
建筑工程技术应届生自荐信
2013/09/27 职场文书
军神教学反思
2014/02/04 职场文书
青春励志演讲稿
2014/04/29 职场文书
公司委托书格式范本
2014/09/16 职场文书
优秀小学生事迹材料
2014/12/26 职场文书
学校节水倡议书
2015/04/29 职场文书
工作表现证明
2015/06/15 职场文书
推普标语口号大全
2015/12/26 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS