Nodejs Promise的一点记录
2017-01-06 09:54
330 查看
项目需要,看了点nodejs,其中比较难理解的就是Promise了,记录一下学习bluebird提供的Promise实现.
Promise.promisifyAll(obj)方法
作用:把对象的方法属性变成异步方法,会在函数加上后缀Async.
看下面的代码:
for in会遍历obj的所有属性,包括原型连上的属性,此时会输出如下:
那么,如果把obj promise化的话,会有什么 呢?代码改成这样:
再看看输出结果:
可以看到,obj对象多了以Async结尾的函数,并且都会返回一个promise. 既然返回了promise,那就可以把返回的值传给then里的方法了:
可是这样并没有什么输出,经过一翻查询,promisify化需要函数满足两个条件:
1. 接收0到N个参数,但最后一个参数必须是回调函数
2.回调函数必须以(error, data) 调用
重新改写一下obj,如下:
这样就有输出了,输出foo
这样理解也比较难,源码现在又不太想看,以后有时间再说吧
Promise.promisifyAll(obj)方法
作用:把对象的方法属性变成异步方法,会在函数加上后缀Async.
看下面的代码:
var Promise = require('bluebird') var obj = { func1: function () { return 'hehe' }, func2: function () { return 'xix' } } for (var property in obj) { console.log("%s => %s", property, obj[property]) }
for in会遍历obj的所有属性,包括原型连上的属性,此时会输出如下:
func1 => function () { return 'hehe' } func2 => function () { return 'xix' }
那么,如果把obj promise化的话,会有什么 呢?代码改成这样:
Promise.promisifyAll(obj) for (var property in obj) { console.log("%s => %s", property, obj[property]) }
再看看输出结果:
func1 => function () { return 'hehe' } func2 => function () { return 'xix' }
func1Async => function (_arg0,_arg1,_arg2) { var promise = new Promise(INTERNAL);
// 省略
return promise;
}
func2Async => function (_arg0,_arg1,_arg2) {
// 省略
return promise;
}
可以看到,obj对象多了以Async结尾的函数,并且都会返回一个promise. 既然返回了promise,那就可以把返回的值传给then里的方法了:
obj.func1Async().then(function (data) { console.log(data) })
可是这样并没有什么输出,经过一翻查询,promisify化需要函数满足两个条件:
1. 接收0到N个参数,但最后一个参数必须是回调函数
2.回调函数必须以(error, data) 调用
重新改写一下obj,如下:
var obj = { func1: function (cb) { cb(null, 'foo') // null为空表示没错误 }, func2: function (cb) { cb(null, 'bar') } }
obj.func1Async().then(function (data) { console.log(data) })
这样就有输出了,输出foo
这样理解也比较难,源码现在又不太想看,以后有时间再说吧
相关文章推荐
- node.js的一点小花边
- 指令式Callback,函数式Promise:对node.js的一声叹息
- nodejs Q.js promise
- 在 Node.js 中用 Q 实现 Promise – Callback 之外的另一种选择
- 在Node.js中使用promise摆脱回调金字塔
- windows7下安装node.js配置过程记录
- Node.js开发指南学习记录1
- node.js web开发:EXPRESS 4.x 以上使用session和cookie 的记录
- 上传附件使用jquery-form.js的ajaxsubmit提交一点记录
- node.js环境搭建记录
- 关于js开发及web攻击的一点记录
- 关于Node.js, Jade一点小小的介绍。
- nodejs mysql pool 只能插入10条记录或者较少记录
- node.js promise 流程控制
- 关于Node.js, Jade一点小小的介绍。
- [整理] Node.JS 相关常用记录
- node.js 知识记录
- Promise解决node.js回调问题
- 有关node.js异步以及常用插件的一点了解
- 折腾一两天,终于学会使用grunt压缩合并混淆JS脚本,小激动,特意记录一下+spm一点意外收获