您的位置:首页 > 理论基础 > 计算机网络

Node:Q与node http模块搭配

2016-02-25 18:38 696 查看
最近在做爬虫的时候,在使用http模块发送请求时,希望拿到请求响应的数据后,再对数据进行解析。当然可以用回调函数解决,阅读性差了点,写起来也比较臃肿。

可以尝试用q

//导入相关模块
var http = require('http'),
Q = require('q');

//请求参数
var options = {
hostname: 'yourHost.com',
path: '/test',
method: 'GET'
};

function promisedRequest( options ) {
//实例化一个延迟对象
var deferred  = Q.defer();
var req = http.request( options, function(response) {
response.setEncoding('utf8');
var responseData = '';

response.on('data', function(data) {
responseData += data;
});

response.on('end', function() {
//这里表示成功执行时,调用resolve方法
deferred.resolve(responseData);
});
});

//listen to the 'error' event
req.on('error', function(err) {
//失败时,调用reject方法
deferred.reject(err);
});
req.end();

//返回promise对象
return deferred.promise;
};

promisedRequest( options )
.then(function(response) { //执行resolve方法时,参数是上个函数执行得到的结果
console.log(JSON.stringify(response));
}, function(error) { //失败执行reject方法
console.log(error);
});


这里就避免了过多的回调,并且同样能合理的管理异步事件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  爬虫 node q http