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 相关文章推荐
10个新的最有前途的JavaScript框架
Mar 12 Javascript
JavaScript面向对象设计二 构造函数模式
Dec 20 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
Mar 10 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
Mar 12 Javascript
二叉树先序遍历的非递归算法具体实现
Jan 09 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
Jul 17 Javascript
关于JS与jQuery中的文档加载问题
Aug 22 jQuery
浅谈vue-lazyload实现的详细过程
Aug 22 Javascript
优雅的elementUI table单元格可编辑实现方法详解
Dec 23 Javascript
ES10 特性的完整指南小结
Mar 04 Javascript
countUp.js实现数字动态变化效果
Oct 17 Javascript
vue3.0搭配.net core实现文件上传组件
Oct 29 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弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
2018/08/17 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
JQuery优缺点分析说明
2011/04/10 Javascript
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
AngularJS ng-bind-html 指令详解及实例代码
2016/07/30 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
2018/05/31 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
vue.js实现图书管理功能
2019/09/24 Javascript
p5.js临摹动态图形的方法
2019/10/23 Javascript
Python的subprocess模块总结
2014/11/07 Python
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
Python使用Pygame绘制时钟
2020/11/29 Python
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
2019/07/18 HTML / CSS
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
Unix控制后台进程都有哪些进程
2016/09/22 面试题
大学生自助营养快餐店创业计划书
2014/01/13 职场文书
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
酒店爱岗敬业演讲稿
2014/09/02 职场文书
科技活动周标语
2014/10/08 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
python如何在word中存储本地图片
2021/04/07 Python
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js