我有一个非常简单的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内手动创建并返回承诺,但文档建议我不应该这样做。
答案 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()