NodeJS 使用 BlueBird 承诺现有 API

NodeJS Promisify an existing API with BlueBird

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

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 中手动创建和 return 承诺,但文档建议我不需要这样做。

从承诺单个函数开始

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()