节点请求库 - 承诺重构

时间:2017-01-18 09:42:13

标签: javascript node.js request

我正在使用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。

任何建议都会很棒。

1 个答案:

答案 0 :(得分:1)

如果您想根据request()方法的结果手动制作Promise,那么这是正确的方法(尽管还需要reject()错误调用)。

然而,该请求库已经appears to support Bluebird Promise库的Promisify函数,它可以自动将这些函数包装成返回Promises的函数。