【问题标题】:Highland.js and buffer(or queue)Highland.js 和缓冲区(或队列)
【发布时间】:2017-03-01 11:23:27
【问题描述】:

所以,我有一个代码来模拟这个问题:

const H = require('highland');
const Promise = require('bluebird');

let i = 0
const stream = H(function(push, next) {
  console.log('read', i)
  push(null, i)
  i++;
  Promise.delay(100).then(() => next())
})


stream
  .flatMap(function(x) {
    console.log('start writing', x)
    return H(Promise.delay(2000, 'y').tap(() => console.log('finish writing', x)))
  })
  .done()

产生这样的输出:

read 0
start writing 0
finish writing 0
read 1
start writing 1

问题:我想要一个一定大小的缓冲区,我将在其中堆叠来自生产者的数据。因此,使用大小为 1 的缓冲区,输出应如下所示:

read 0
start writing 0
read 1
finish writing 0
start writing 1
read 2

所以,如果“生产者”“忙”,我想缓冲生产者的价值。高地可以做这样的事情吗?

【问题讨论】:

    标签: node.js reactive-programming highland.js


    【解决方案1】:

    没有。这是不可能的(不是通过承诺,但是是的 - 使用回调)并且他们确实在this longish issue thread

    中声明了这一点

    我决定写scramjet的原因之一。

    像你这样的简单案例:

    let i = 0;
    const stream = new (require("scramjet").DataStream)({read() { this.push(i++); })
    
    stream.map(
        (x) => Promise.delay(2000, 'y').tap(() => console.log('finish writing', x))
    ).accumulate(
        () => 0
    ).then(
        () => console.log("done")
    )
    

    它只是按您的意愿工作。 :)

    【讨论】:

    • 请检查我的答案。你怎么看?
    • 嗯...好吧,我只是猜想超燃冲压发动机会让这件事变得简单得多...如果我理解正确this single file 会做与您在 Gist 中写的相同的事情...并且几乎没有使用任何依赖项,同时在代码中看起来更干净......而且可以肯定这要快得多。
    • 这个库以某种方式使错误静音。我看到的不是正常错误,而是简短的:(node:97642) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 14): TypeError: Cannot read property 'id' of undefined
    • 好的。我已更新为使用您的 API - take a look at this。这是高地速度的两倍,在真正的 API 上它会更快。你说的“节点标准库”是什么意思
    • 好的。所以我开始了,但由于我不确定“按时间或计数分组”的作用,我无法与 Higland 获得一致的结果。我更新了要点,所以现在它可以完全工作了。我们将对此进行研究——也许这种方法在超燃冲压发动机中也适用。
    【解决方案2】:

    答案在my arcticle

    这里的想法 - 缓冲是流 api 的一部分。高地只是操纵溪流

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 2017-04-08
      • 2020-06-23
      • 2014-09-18
      • 2015-07-31
      • 2012-09-04
      相关资源
      最近更新 更多