Как можно программно применить обратное давление с помощью javascript TransformStream?

Согласно спецификации для TransformStreams на https://streams.spec.whatwg.org/#pipe-chains нам говорят следующее:

Как только цепочка каналов построена, она будет распространять сигналы о том, как быстро по ней должны проходить фрагменты. Если какой-либо шаг в цепочке еще не может принимать фрагменты, он распространяет сигнал в обратном направлении по цепочке конвейеров, пока, в конце концов, исходный источник не получит указание прекратить так быстро создавать фрагменты. Этот процесс нормализации потока из исходного источника в зависимости от того, насколько быстро цепочка может обрабатывать фрагменты, называется противодавлением.

Как мы контролируем эти сигналы?

В частности, мне нужно после чтения приостановить чтение, чтобы я мог обрабатывать данные асинхронно. После обработки мне нужно снова приостановить чтение, чтобы получить больше данных.

То, что я испытываю, - это поток входящих данных для метода преобразования и нет очевидного способа сказать «вау, помедленнее».

Конкретно, исходному источнику присваивается значение controller.desiredSize(или byteController.desiredSize), и он может соответствующим образом регулировать скорость потока данных. Это значение получено из параметра write.desiredSize, соответствующего конечному приемнику, который обновляется по мере того, как конечный приемник заканчивает запись фрагментов.

Свойство requiredSize помечено только для чтения на контроллере, так что это похоже на неправильный инструмент для использования. Кроме того, кажется, что это каким-то образом происходит от писателя, и это не та часть, которую нам нужно останавливать.

К сожалению, документы не имеют для меня смысла, они говорят мне, что вещи существуют, но не говорят, как они сочетаются друг с другом, поэтому я потерялся.

Есть ли способ «приостановить» чтение, чтобы метод преобразования был временно приостановлен, и есть ли способ снова «приостановить» это чтение позже, когда мы будем готовы?

Я использую javascript в Firefox v104.

0 ответов

Другие вопросы по тегам