是否可以在Bluebird Promisified Request模块中中止连接?

时间:2016-05-29 23:17:58

标签: javascript node.js request promise bluebird

我正在开发一个涉及大量大文件的项目,我只需要提取HTTP header而不是完全加载文件本身,所以我使用的是request模块立即提取HTTP头,然后中止请求,因为我不需要完整的文件。唉,我当前的结构让我分配了请求对象,然后使用response的监听器,如下所示。

const req = request(url);

req.on('response', function(res) {
            if (res.statusCode !== 200) {
                req.abort();
                return this.emit('error', new Error('Bad status code'));
            }
            if (res.headers.hasOwnProperty(headProp)) {
                    parseFunc(res.headers);
                    req.abort();
                }
            });

理想情况下,如果可能的话,我希望利用Promise来解析请求URL,如:

const req = request.getAsync(url)

 req.on('response', function(res) {
     //whatever logic
                });

 req.then(parseFunc(res.headers);

但是由于请求对象尚未保存到任何内容,因此侦听器事件无法正常工作。此外,then上的链式request.getAsync.then似乎只在解析文件后执行,这可能是10-11秒,相对于退出时的250ms-1s中止。

因此,简而言之:我可以在避免回调的同时获得我想要的功能吗?

0 个答案:

没有答案