Javascript 高地在完全消耗之前添加到流中?

Javascript 高地在完全消耗之前添加到流中?,javascript,stream,highland.js,Javascript,Stream,Highland.js,是否有一种方法可以向高地的溪流中添加一条完整描述我们需求的结束信息 假设我们有以下情况: const stream = high([1,4,6,7]) 然后在这个流中,我想计算每个正在处理的值,并说 sink.drain(stream.pipe(4)) 为4表示数组的元素数。考虑这可能是一个流中的数千个对象,我需要从流中消耗,以便能够计数。< /P> 我不能说array.length,因为它是可以随任何信息一起提供的源,并且该信息正在通过流进行处理。。。我如何才能在流中添加一条消息,并在消息

是否有一种方法可以向高地的溪流中添加一条完整描述我们需求的结束信息

假设我们有以下情况:

const stream = high([1,4,6,7])
然后在这个流中,我想计算每个正在处理的值,并说

sink.drain(stream.pipe(4))
为4表示数组的元素数。考虑这可能是一个流中的数千个对象,我需要从流中消耗,以便能够计数。< /P>
我不能说array.length,因为它是可以随任何信息一起提供的源,并且该信息正在通过流进行处理。。。我如何才能在流中添加一条消息,并在消息结尾描述所使用的内容?

听起来您希望围绕您的值设置一些状态,但不妨碍值的使用。我建议考虑一些涉及h到h的解决方案

您可以使用fork拆分流,或者观察并减少值中的某些状态:

h([1, 2, 3, 4])
  .through(stream => {
    const length = stream.observe()
      .reduce(0, m => m + 1)
      .map(length => ({ length }))

    return h([stream, length])
      .sequence()
  })
  .errors(err => console.error(err))
  .each(x => console.log(x))
您可以根据源流的事件创建一些状态并返回新流:

const h = require('highland')
h([1, 2, 3, 4])
  .through(stream => {
    let length = 0

    return h(push => stream
      .tap(() => ++length)
      .errors(err => push(err))
      .each(x => push(null, x))
      .done(() => {
        push(null, `length: ${length}`)
        push(null, h.nil)
      }))
  })
  .errors(err => console.error(err))
  .each(x => console.log(x))

感谢您的帮助,在最后,流被传递到一个消息队列,因此我在创建管道的过程中创建了一个结束消息,在执行流的过程中,我用流填充了该消息。后来我不得不用收集到的信息运行第二个流。。。因为它是一个队列,所以消息的顺序保持不变。。。正如您所说的,使用收集的信息创建了一个新流