Ответ 1
Из чтения документации это выглядит как Это - ваш ответ на вашу ошибку. Способ, которым поток позволяет остальной части программы знать, что она закончилась, заключается в передаче "nil" в качестве следующей части данных в потоке. Рассматривая пример кода по этой ссылке, вы должны определить, что поток закончился и действует соответственно.
Вот почему вы получаете сообщение об ошибке - ваша труба пытается перейти к следующим данным, но бросает ошибку, поскольку нет такой вещи, как следующая после "nil".
Что касается правильного способа уничтожения потока, я думаю, что способ, которым вы пользуетесь, является правильным способом (я не так знаком с highland.js, так что просто основываясь на чтении документации и знакомстве с javascript в вообще), это просто, что эффекты не обязательно то, что вы ожидаете. Я не ожидал бы уничтожения выхода, чтобы разрушить трубу, это потому, что труба "принадлежит" к вводу, так как это то, против чего она была вызвана. Если вы хотите уничтожить свою трубу, я бы предположил, что путь к ней будет состоять в том, чтобы вызвать
input.destroy()
вместо этого (или действительно, а также output.destroy(), так как вы не хотите оставлять свободные концы!). В документации указано, что вы должны вызывать destroy() или .end() для любого сконструированного вручную потока (например, вы уже выше).
Подумайте об этом так. Если у меня есть источник, который отправляется в пункт назначения, и я удаляю этот пункт назначения, конечно, я получаю сообщение об ошибке, потому что мне некуда идти, и мой поток вывода будет рассказывать все остальное, что он закончилось. Если вы хотите уничтожить трубу, имеет смысл уничтожить источник, и если вы остановите вывод/пункт назначения, вам нужно найти куда-то еще для ввода!