@@ -20,23 +20,21 @@ function wrappedFetch() {
2020 args [ i ] = arguments [ i ] ;
2121 }
2222
23- wrappedPromise . then = promise . then . bind ( promise ) ;
24- wrappedPromise . catch = promise . catch . bind ( promise ) ;
2523 wrappedPromise . promise = promise ;
2624
27- fetch . apply ( null , args ) . then ( function ( response ) {
25+ utils . Promise . resolve ( ) . then ( function ( ) {
26+ return fetch . apply ( null , args ) ;
27+ } ) . then ( function ( response ) {
2828 wrappedPromise . resolve ( response ) ;
29- } , function ( error ) {
30- wrappedPromise . reject ( error ) ;
3129 } ) . catch ( function ( error ) {
32- wrappedPromise . catch ( error ) ;
30+ wrappedPromise . reject ( error ) ;
3331 } ) ;
3432
3533 return wrappedPromise ;
3634}
3735
3836function fetchRequest ( options , callback ) {
39- var wrappedPromise , timer , fetchResponse ;
37+ var wrappedPromise , timer , response ;
4038
4139 var headers = new Headers ( ) ;
4240
@@ -81,28 +79,28 @@ function fetchRequest(options, callback) {
8179 } , options . timeout ) ;
8280 }
8381
84- wrappedPromise . promise . then ( function ( response ) {
85- var result ;
86-
87- fetchResponse = response ;
82+ wrappedPromise . promise . then ( function ( fetchResponse ) {
83+ response = {
84+ statusCode : fetchResponse . status
85+ } ;
8886
8987 if ( options . timeout > 0 ) {
9088 clearTimeout ( timer ) ;
9189 }
9290
93- if ( response . status >= 200 && response . status < 300 ) {
94- return options . binary ? response . blob ( ) : response . text ( ) ;
91+ if ( response . statusCode >= 200 && response . statusCode < 300 ) {
92+ return options . binary ? fetchResponse . blob ( ) : fetchResponse . text ( ) ;
9593 }
9694
97- return result . json ( ) ;
95+ return fetchResponse . json ( ) ;
9896 } ) . then ( function ( result ) {
99- if ( fetchResponse . status >= 200 && fetchResponse . status < 300 ) {
100- callback ( null , fetchResponse , result ) ;
97+ if ( response . statusCode >= 200 && response . statusCode < 300 ) {
98+ callback ( null , response , result ) ;
10199 } else {
102- callback ( result , fetchResponse ) ;
100+ callback ( result , response ) ;
103101 }
104102 } ) . catch ( function ( error ) {
105- callback ( error , fetchResponse ) ;
103+ callback ( error , response ) ;
106104 } ) ;
107105
108106 return { abort : wrappedPromise . reject } ;
@@ -214,10 +212,21 @@ function xhRequest(options, callback) {
214212 return { abort : abortReq } ;
215213}
216214
215+ function testXhr ( ) {
216+ try {
217+ new XMLHttpRequest ( ) ;
218+ return true ;
219+ } catch ( err ) {
220+ return false ;
221+ }
222+ }
223+
224+ var hasXhr = testXhr ( ) ;
225+
217226module . exports = function ( options , callback ) {
218- if ( typeof XMLHttpRequest === 'undefined' && ! options . xhr ) {
219- return fetchRequest ( options , callback ) ;
220- } else {
227+ if ( hasXhr || options . xhr ) {
221228 return xhRequest ( options , callback ) ;
229+ } else {
230+ return fetchRequest ( options , callback ) ;
222231 }
223232} ;
0 commit comments