簡體   English   中英

Highland.js和緩沖區(或隊列)

[英]Highland.js and buffer(or queue)

所以,我有下面的代碼來模擬這個問題:

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

因此,如果“生產者”很忙,我想緩沖生產者的價值。 可以在高地做這樣的事情嗎?

不。這是不可能的(不是通過諾言,而是通過回調實現),而且他們確實在這個冗長的問題線程中聲明了這一點

我決定寫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")
)

它只是按您想要的方式工作。 :)

答案在我的北極

這里的想法–緩沖是流api的一部分。 高地只是操縱溪流

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM