| 
						 | 
						- 'use strict';
 - 
 - var util = require('util');
 - var debug = require('util').debuglog('urllib');
 - var ms = require('humanize-ms');
 - var HttpClient = require('./httpclient');
 - 
 - var _Promise;
 - 
 - module.exports = HttpClient2;
 - 
 - function HttpClient2(options) {
 -   HttpClient.call(this, options);
 - }
 - 
 - util.inherits(HttpClient2, HttpClient);
 - 
 - HttpClient2.prototype.request = HttpClient2.prototype.curl = function request(url, args) {
 -   var self = this;
 -   args = args || {};
 -   args.retry = args.retry || 0;
 -   if (args.retryDelay) {
 -     args.retryDelay = ms(args.retryDelay);
 -   }
 -   args.isRetry = args.isRetry || function(res) {
 -     return res.status >= 500;
 -   };
 -   return HttpClient.prototype.request.call(self, url, args)
 -   .then(function(res) {
 -     if (args.retry > 0 && typeof args.isRetry === 'function' && args.isRetry(res)) {
 -       args.retry--;
 -       debug('retry request %s, remain %s', url, args.retry);
 -       if (args.retryDelay) {
 -         debug('retry after %sms', args.retryDelay);
 -         return sleep(args.retryDelay).then(function() { return self.request(url, args); });
 -       }
 -       return self.request(url, args);
 -     }
 -     return res;
 -   })
 -   .catch(function(err) {
 -     if (args.retry > 0) {
 -       args.retry--;
 -       debug('retry request %s, remain %s, err %s', url, args.retry, err);
 -       if (args.retryDelay) {
 -         debug('retry after %sms', args.retryDelay);
 -         return sleep(args.retryDelay).then(function() { return self.request(url, args); });
 -       }
 -       return self.request(url, args);
 -     }
 -     throw err;
 -   });
 - };
 - 
 - HttpClient2.prototype.requestThunk = function requestThunk(url, args) {
 -   var self = this;
 -   return function(callback) {
 -     self.request(url, args)
 -     .then(function(res) {
 -       var cb = callback;
 -       // make sure cb(null, res) throw error won't emit catch callback below
 -       callback = null;
 -       cb(null, res);
 -     })
 -     .catch(function(err) {
 -       if (!callback) {
 -         // TODO: how to handle this error?
 -         return;
 -       }
 -       callback(err);
 -     });
 -   };
 - };
 - 
 - function sleep(ms) {
 -   if (!_Promise) {
 -     _Promise = require('any-promise');
 -   }
 - 
 -   return new _Promise(function(resolve) {
 -     setTimeout(resolve, ms);
 -   });
 - }
 
 
  |