@@ -142,59 +142,12 @@ function requestAsEventEmitter(opts) {
142142 return ;
143143 }
144144
145- const downloadBodySize = Number ( res . headers [ 'content-length' ] ) || null ;
146- let downloaded = 0 ;
147-
148145 setImmediate ( ( ) => {
149- const progressStream = new Transform ( {
150- transform ( chunk , encoding , callback ) {
151- downloaded += chunk . length ;
152-
153- const percent = downloadBodySize ? downloaded / downloadBodySize : 0 ;
154-
155- // Let flush() be responsible for emitting the last event
156- if ( percent < 1 ) {
157- ee . emit ( 'downloadProgress' , {
158- percent,
159- transferred : downloaded ,
160- total : downloadBodySize
161- } ) ;
162- }
163-
164- callback ( null , chunk ) ;
165- } ,
166-
167- flush ( callback ) {
168- ee . emit ( 'downloadProgress' , {
169- percent : 1 ,
170- transferred : downloaded ,
171- total : downloadBodySize
172- } ) ;
173-
174- callback ( ) ;
175- }
176- } ) ;
177-
178- mimicResponse ( res , progressStream ) ;
179- progressStream . redirectUrls = redirects ;
180-
181- const response = opts . decompress === true &&
182- is . function ( decompressResponse ) &&
183- opts . method !== 'HEAD' ? decompressResponse ( progressStream ) : progressStream ;
184-
185- if ( ! opts . decompress && [ 'gzip' , 'deflate' ] . indexOf ( res . headers [ 'content-encoding' ] ) !== - 1 ) {
186- opts . encoding = null ;
146+ try {
147+ getResponse ( res , opts , ee , redirects ) ;
148+ } catch ( e ) {
149+ ee . emit ( 'error' , e ) ;
187150 }
188-
189- ee . emit ( 'response' , response ) ;
190-
191- ee . emit ( 'downloadProgress' , {
192- percent : 0 ,
193- transferred : 0 ,
194- total : downloadBodySize
195- } ) ;
196-
197- res . pipe ( progressStream ) ;
198151 } ) ;
199152 } ) ;
200153
@@ -297,6 +250,61 @@ function requestAsEventEmitter(opts) {
297250 return ee ;
298251}
299252
253+ function getResponse ( res , opts , ee , redirects ) {
254+ const downloadBodySize = Number ( res . headers [ 'content-length' ] ) || null ;
255+ let downloaded = 0 ;
256+
257+ const progressStream = new Transform ( {
258+ transform ( chunk , encoding , callback ) {
259+ downloaded += chunk . length ;
260+
261+ const percent = downloadBodySize ? downloaded / downloadBodySize : 0 ;
262+
263+ // Let flush() be responsible for emitting the last event
264+ if ( percent < 1 ) {
265+ ee . emit ( 'downloadProgress' , {
266+ percent,
267+ transferred : downloaded ,
268+ total : downloadBodySize
269+ } ) ;
270+ }
271+
272+ callback ( null , chunk ) ;
273+ } ,
274+
275+ flush ( callback ) {
276+ ee . emit ( 'downloadProgress' , {
277+ percent : 1 ,
278+ transferred : downloaded ,
279+ total : downloadBodySize
280+ } ) ;
281+
282+ callback ( ) ;
283+ }
284+ } ) ;
285+
286+ mimicResponse ( res , progressStream ) ;
287+ progressStream . redirectUrls = redirects ;
288+
289+ const response = opts . decompress === true &&
290+ is . function ( decompressResponse ) &&
291+ opts . method !== 'HEAD' ? decompressResponse ( progressStream ) : progressStream ;
292+
293+ if ( ! opts . decompress && [ 'gzip' , 'deflate' ] . indexOf ( res . headers [ 'content-encoding' ] ) !== - 1 ) {
294+ opts . encoding = null ;
295+ }
296+
297+ ee . emit ( 'response' , response ) ;
298+
299+ ee . emit ( 'downloadProgress' , {
300+ percent : 0 ,
301+ transferred : 0 ,
302+ total : downloadBodySize
303+ } ) ;
304+
305+ res . pipe ( progressStream ) ;
306+ }
307+
300308function asPromise ( opts ) {
301309 const timeoutFn = requestPromise => opts . gotTimeout && opts . gotTimeout . request ?
302310 pTimeout ( requestPromise , opts . gotTimeout . request , new got . RequestError ( { message : 'Request timed out' , code : 'ETIMEDOUT' } , opts ) ) :
0 commit comments