码迷,mamicode.com
首页 > Web开发 > 详细

Nodejs Promise的一点记录

时间:2017-01-06 11:05:12      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:回调函数   接收   int   回调   size   ejs   log   require   pre   

项目需要,看了点nodejs,其中比较难理解的就是Promise了,记录一下学习bluebird提供的Promise实现.

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

这样理解也比较难,源码现在又不太想看,以后有时间再说吧

 

Nodejs Promise的一点记录

标签:回调函数   接收   int   回调   size   ejs   log   require   pre   

原文地址:http://www.cnblogs.com/cool-fire/p/6255117.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!