Browse Source

merge asCallback with asPromise

http2
Vsevolod Strukchinsky 9 years ago
parent
commit
0e3954b055
  1. 88
      index.js

88
index.js

@ -76,63 +76,59 @@ function requestAsEventEmitter(opts) {
return ee; return ee;
} }
function asCallback(opts, cb) { function asPromise(opts) {
const ee = requestAsEventEmitter(opts); return new Promise((resolve, reject) => {
const ee = requestAsEventEmitter(opts);
ee.on('request', req => { ee.on('request', req => {
if (isStream(opts.body)) { if (isStream(opts.body)) {
opts.body.pipe(req); opts.body.pipe(req);
opts.body = undefined; opts.body = undefined;
return; return;
} }
req.end(opts.body); req.end(opts.body);
}); });
ee.on('response', res => { ee.on('response', res => {
const stream = opts.encoding === null ? getStream.buffer(res) : getStream(res, opts); const stream = opts.encoding === null ? getStream.buffer(res) : getStream(res, opts);
stream stream
.then(data => { .then(data => {
let err; let err;
const statusCode = res.statusCode; const statusCode = res.statusCode;
if (statusCode < 200 || statusCode > 299) { res.body = data;
err = new got.HTTPError(statusCode, opts);
}
if (opts.json && statusCode !== 204) { if (statusCode < 200 || statusCode > 299) {
try { err = new got.HTTPError(statusCode, opts);
data = JSON.parse(data);
} catch (e) {
err = new got.ParseError(e, opts, data);
} }
}
cb(err, data, res);
})
.catch(err => cb(new got.ReadError(err, opts), null, res));
});
ee.on('error', cb); if (opts.json && statusCode !== 204) {
} try {
res.body = JSON.parse(res.body);
} catch (e) {
err = new got.ParseError(e, opts, data);
}
}
function asPromise(opts) { if (err) {
return new Promise((resolve, reject) => Object.defineProperty(err, 'response', {value: res});
asCallback(opts, (err, data, response) => { reject(err);
if (response) { return;
response.body = data; }
}
if (err) { resolve(res);
Object.defineProperty(err, 'response', {value: response}); })
reject(err); .catch(err => {
return; err = new got.ReadError(err, opts);
} Object.defineProperty(err, 'response', {value: res});
reject(err);
});
});
resolve(response); ee.on('error', reject);
}) });
);
} }
function asStream(opts) { function asStream(opts) {

Loading…
Cancel
Save