Я храню некоторые данные json в виде gzip-файла на сервере (чтобы уменьшить объем передаваемых данных, а также уменьшить использование диска на сервере).
Теперь я хочу распаковать и проанализировать данные json на стороне клиента (в браузере работает реакция/узел).
Я подумал, что использование oboe.js может быть подходящим выбором для этой задачи. К сожалению, напрямую передать оба потока при работе в браузере не представляется возможным. Решение, к которому я вернулся, состоит в том, чтобы передавать куски данных в oboe после их распаковки (см. код внизу этого поста).
Хотя это работает, браузер на некоторое время зависает, если слушателю узла требуется некоторое время для обработки узла (конечно, для анализа данных потребуется некоторое время, но я хотел бы, чтобы приложение оставалось отзывчивым и, возможно, даже обновляло просмотр по уже обработанным данным).
Я подозреваю, что все данные в основном передаются на гобой сразу, а не ждут, пока будет прочитан последний фрагмент. Это правильно? Есть ли подходящий способ замедлить объем данных, поступающих на гобой, или есть более прямой способ работы с gzip-потоком и гобоем?
var o = oboe();
var gunzip = zlib.createGunzip();
gunzip.on('data', (chunk) => o.emit('data', chunk.toString()))
.on('end', o.emit('end'));
request(options).on('response', response => {
o.emit('start', response.statusCode, response.headers);
response.pipe(gunzip);
};
o.node('{name}', () => {
//Do stuff with node
return oboe.drop;
});



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Кажется, вы не можете правильно использовать функциональность канала (например, адаптацию скорости) из-за «обертки» в строках 4-5. Просто удалите его.
Дополнительная информация о трубопроводе узел.js
Спасибо за предоставленный вами ресурс, я буду следить за этим и посмотрю, смогу ли я найти решение. Что вы имеете в виду под «просто удалить его» - использование gunzip.pipe(o) не работает («Неперехваченная ошибка: dest.once не является функцией»), но каким-то образом данные должны передаваться из gunzip в гобой.
Кажется, когда поток передается на гобой, данные передаются на гобой, когда они доступны. Это решение, вероятно, было принято исходя из предположения, что события узла обрабатываются быстрее, чем данные, поступающие в поток.