Don't increase buffering in transformWithCancel
Keep backpressure the same as in default TransformStream().
This commit is contained in:
parent
0b0112d1e6
commit
721e522b17
|
@ -101,7 +101,8 @@ function transformRaw(input, options) {
|
|||
* @returns {TransformStream}
|
||||
*/
|
||||
function transformWithCancel(cancel) {
|
||||
let backpressureChangePromiseResolve = function() {};
|
||||
let pulled = false;
|
||||
let backpressureChangePromiseResolve;
|
||||
let outputController;
|
||||
return {
|
||||
readable: new ReadableStream({
|
||||
|
@ -109,17 +110,24 @@ function transformWithCancel(cancel) {
|
|||
outputController = controller;
|
||||
},
|
||||
pull() {
|
||||
backpressureChangePromiseResolve();
|
||||
if (backpressureChangePromiseResolve) {
|
||||
backpressureChangePromiseResolve();
|
||||
} else {
|
||||
pulled = true;
|
||||
}
|
||||
},
|
||||
cancel
|
||||
}),
|
||||
}, {highWaterMark: 0}),
|
||||
writable: new WritableStream({
|
||||
write: async function(chunk) {
|
||||
outputController.enqueue(chunk);
|
||||
if (outputController.desiredSize <= 0) {
|
||||
if (!pulled) {
|
||||
await new Promise(resolve => {
|
||||
backpressureChangePromiseResolve = resolve;
|
||||
});
|
||||
backpressureChangePromiseResolve = null;
|
||||
} else {
|
||||
pulled = false;
|
||||
}
|
||||
},
|
||||
close: outputController.close.bind(outputController),
|
||||
|
|
|
@ -135,7 +135,7 @@ export default {
|
|||
value.postMessage({ action: 'cancel' });
|
||||
});
|
||||
}
|
||||
});
|
||||
}, {highWaterMark: 0});
|
||||
return;
|
||||
}
|
||||
util.restoreStreams(value);
|
||||
|
|
Loading…
Reference in New Issue
Block a user