首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Highland.js和缓冲区(或队列)

Highland.js和缓冲区(或队列)
EN

Stack Overflow用户
提问于 2017-03-01 19:23:28
回答 2查看 323关注 0票数 0

因此,我有下面的代码来模拟这个问题:

代码语言:javascript
复制
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()

它会产生如下输出:

代码语言:javascript
复制
read 0
start writing 0
finish writing 0
read 1
start writing 1

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

代码语言:javascript
复制
read 0
start writing 0
read 1
finish writing 0
start writing 1
read 2

因此,如果“生产者”是“忙”的,我想缓冲来自生产者的值。在高地上做这样的事情是可能的吗?

EN

回答 2

Stack Overflow用户

发布于 2017-04-05 19:38:56

不是的。这是不可能的(不是通过承诺,然而是的-通过回调),他们确实在this longish issue thread中声明了这一点

这是我决定写scramjet的原因之一。

一个像你这样的简单案例:

代码语言:javascript
复制
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")
)

它就像你想要的那样工作。:)

票数 0
EN

Stack Overflow用户

发布于 2017-04-05 19:43:25

答案就在my arcticle

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42530406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档