@@ -57,24 +57,38 @@ class RNFetchBlobFetchPolyfill {
57
57
// task is a progress reportable and cancellable Promise, however,
58
58
// task.then is not, so we have to extend task.then with progress and
59
59
// cancel function
60
- let task = promise
60
+ let progressHandler , uploadHandler , cancelHandler
61
+ let statefulPromise = promise
61
62
. then ( ( body ) => {
62
- return RNFetchBlob . config ( config )
63
- . fetch ( options . method , url , options . headers , body )
63
+ let task = RNFetchBlob . config ( config )
64
+ . fetch ( options . method , url , options . headers , body )
65
+ if ( progressHandler )
66
+ task . progress ( progressHandler )
67
+ if ( uploadHandler )
68
+ task . uploadProgress ( uploadHandler )
69
+ if ( cancelHandler )
70
+ task . cancel ( )
71
+ return task . then ( ( resp ) => {
72
+ log . verbose ( 'response' , resp )
73
+ // release blob cache created when sending request
74
+ if ( blobCache !== null && blobCache instanceof Blob )
75
+ blobCache . close ( )
76
+ return Promise . resolve ( new RNFetchBlobFetchRepsonse ( resp ) )
77
+ } )
64
78
} )
65
79
66
- let statefulPromise = task . then ( ( resp ) => {
67
- log . verbose ( 'response' , resp )
68
- // release blob cache created when sending request
69
- if ( blobCache !== null && blobCache instanceof Blob )
70
- blobCache . close ( )
71
- return Promise . resolve ( new RNFetchBlobFetchRepsonse ( resp ) )
72
- } )
73
-
74
80
// extend task.then progress with report and cancelling functions
75
- statefulPromise . cancel = task . cancel
76
- statefulPromise . progress = task . progress
77
- statefulPromise . uploadProgress = task . uploadProgress
81
+ statefulPromise . progress = ( fn ) => {
82
+ progressHandler = fn
83
+ }
84
+ statefulPromise . uploadProgress = ( fn ) => {
85
+ uploadHandler = fn
86
+ }
87
+ statefulPromise . cancel = ( ) => {
88
+ cancelHandler = true
89
+ if ( task . cancel )
90
+ task . cancel ( )
91
+ }
78
92
79
93
return statefulPromise
80
94
0 commit comments