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()
我有一个非常简单的 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()