Node:Q与node http模块搭配

最近在做爬虫的时候,在使用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);
});

这里就避免了过多的回调,并且同样能合理的管理异步事件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值