NodeJS使用BlueBird Promisify现有API

时间:2015-07-20 16:12:09

标签: node.js promise bluebird

我有一个非常简单的API,它从服务器获取一些数据,进行一些处理,然后将其发送到客户端。我正在尝试“宣传”#39;这个小模块。下面是一个例子

var MyModule = function (){}

MyModule.prototype.makeRequest = function(requestURL){

    //Set request up
    //Return the promise for the request.
    return request(requestOptions);
}

MyModule.prototype.myFunction = function(var1, var2, cb){

    var URL = "http://....//";

    this.makeRequest(URL)
        .then(function(data)
        {
            //Some processing logic
            cb(null,data);
        })
        .catch(function(err)
        {
            cb(err,null);
        })
}

module.exports = MyModule;

然后要使用此模块,我想执行以下操作...

 var MyModule = new(require('../lib/MyModule'));

 MyModule.myFunction(var1,var2)
            .then(function(data)
            {
                console.log(data);
            }).catch(function(err){
                console.log(err);
            });

如何使用BlueBird实现此功能?我一直在尝试使用PromisifyAll()..

var MyModule = new(require('../lib/MyModule'));
var Promise = require("bluebird");
var MyModuleAsync = Promise.promisifyAll(MyModule);

我对此的处理方法显然是不正确的,我知道我可以在API内手动创建并返回承诺,但文档建议我不应该这样做。

1 个答案:

答案 0 :(得分:1)

通过宣传单一功能开始

var MyModule = new(require('../lib/MyModule'));
var Promise = require("bluebird");
var MyModuleAsync = Promise.promisify(MyModule.myFunction, MyModule);

MyModuleAsync(var1, var2).then(function(res){
  // etc
});

一旦你开始工作,你就可以开始考虑改变promisifyAll()