我正在使用Node请求库,可以在以下链接中找到
https://github.com/request/request
我有许多功能,如下所示
function doRequest() {
return new Promise(function(resolve,reject) {
request('some-url', function(error,response,body) {
if (!error && response.statusCode === 200) {
resolve(body)
}
});
});
}
然后我将这些函数称为
doRequest()
.then(function(response){
console.log(response);
})
我的问题是,有没有办法编写我的doRequest函数而无需创建新的Promise?我觉得它看起来很尴尬,可能是一个反模式?在AngularJS中你经常看到人们如何使用
$q.defer()
进行http调用时,http调用已经返回一个promise。
任何建议都会很棒。
答案 0 :(得分:1)
如果您想根据request()
方法的结果手动制作Promise,那么这是正确的方法(尽管还需要reject()
错误调用)。
然而,该请求库已经appears to support Bluebird Promise库的Promisify
函数,它可以自动将这些函数包装成返回Promises的函数。