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 相关文章推荐
基础的prototype.js常用函数及其用法
Mar 10 Javascript
jQuery当鼠标悬停时放大图片的效果实例
Jul 03 Javascript
js之onload事件的一点使用心得
Aug 14 Javascript
jQuery老黄历完整实现方法
Jan 16 Javascript
javascript顺序加载图片的方法
Jul 18 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
Jul 19 Javascript
ztree加载完成后显示勾选节点的实现代码
Oct 22 Javascript
VueCli3构建TS项目的方法步骤
Nov 07 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
Nov 21 Javascript
jQuery实现的隔行变色功能【案例】
Feb 18 jQuery
layui默认选中table的CheckBox复选框方法
Sep 19 Javascript
ant design vue 表格table 默认勾选几项的操作
Oct 31 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中调用JAVA
2006/10/09 PHP
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
PHP实现的简单日历类
2014/11/29 PHP
jQuery之浮动窗口实现代码(两种方法)
2010/09/08 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
JavaScript编程中的Promise使用大全
2015/07/28 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
JS检测移动端横竖屏的代码
2016/05/30 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
2017/07/21 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
python+opencv实现动态物体追踪
2018/01/09 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
python中get和post有什么区别
2020/06/19 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
出纳岗位职责
2013/11/09 职场文书
大学生职业生涯规划书前言
2014/01/09 职场文书
中式面点餐厅创业计划书
2014/01/29 职场文书
公司会议策划方案
2014/05/17 职场文书
大学新闻系自荐书
2014/05/31 职场文书
学校教师安全责任书
2014/07/23 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
客户付款通知书
2015/04/23 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
golang elasticsearch Client的使用详解
2021/05/05 Golang
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL
简单谈谈Python面向对象的相关知识
2021/06/28 Python
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS