File tree Expand file tree Collapse file tree 1 file changed +18
-4
lines changed Expand file tree Collapse file tree 1 file changed +18
-4
lines changed Original file line number Diff line number Diff line change @@ -165,9 +165,10 @@ function transformRaw(input, options) {
165
165
* @param {Function } cancel
166
166
* @returns {TransformStream }
167
167
*/
168
- function transformWithCancel ( cancel ) {
168
+ function transformWithCancel ( customCancel ) {
169
169
let pulled = false ;
170
- let backpressureChangePromiseResolve ;
170
+ let cancelled = false ;
171
+ let backpressureChangePromiseResolve , backpressureChangePromiseReject ;
171
172
let outputController ;
172
173
return {
173
174
readable : new ReadableStream ( {
@@ -181,16 +182,29 @@ function transformWithCancel(cancel) {
181
182
pulled = true ;
182
183
}
183
184
} ,
184
- cancel
185
+ async cancel ( reason ) {
186
+ cancelled = true ;
187
+ if ( customCancel ) {
188
+ await customCancel ( reason ) ;
189
+ }
190
+ if ( backpressureChangePromiseReject ) {
191
+ backpressureChangePromiseReject ( reason ) ;
192
+ }
193
+ }
185
194
} , { highWaterMark : 0 } ) ,
186
195
writable : new WritableStream ( {
187
196
write : async function ( chunk ) {
197
+ if ( cancelled ) {
198
+ throw new Error ( 'Stream is cancelled' ) ;
199
+ }
188
200
outputController . enqueue ( chunk ) ;
189
201
if ( ! pulled ) {
190
- await new Promise ( resolve => {
202
+ await new Promise ( ( resolve , reject ) => {
191
203
backpressureChangePromiseResolve = resolve ;
204
+ backpressureChangePromiseReject = reject ;
192
205
} ) ;
193
206
backpressureChangePromiseResolve = null ;
207
+ backpressureChangePromiseReject = null ;
194
208
} else {
195
209
pulled = false ;
196
210
}
You can’t perform that action at this time.
0 commit comments