【问题标题】:JavaScript type for "streaming" array of objects用于“流式”对象数组的 JavaScript 类型
【发布时间】:2018-03-20 14:06:24
【问题描述】:

我有一个从异步函数获得的对象数组,我想“打开一个通道”并“流式传输”接收到的对象。我怎样才能实现这个概念。
可能我想将对象从我的代码中的不同位置附加到“流”

【问题讨论】:

  • 您能详细说明您想要实现的目标吗?如果你得到一个对象数组,那么你已经拥有了所有可用的对象,那么为什么要在某个地方“流式传输”它们而不是直接传递数组呢?
  • 我正在逐块查询区块链中的交易 - 我想在每次获得下一个块的结果时将数据附加到流中
  • nodejs 的流可以在对象模式下运行。
  • 使用 RxJS、Most.js 或 xstream 等流库

标签: javascript node.js ecmascript-6 streaming es6-promise


【解决方案1】:

因此,您希望定期或基于某个输入数组运行异步函数,进行异步调用并将返回数组的项目作为流推送。

正如@fathyb 提出使用流库最容易实现的那样,下面的示例使用scramjet

const {DataStream} = require("scramjet");

const blocks = require("input-array.json"); // the array of inputs

const myStream = DataStream.fromArray(blocks)                
                                            // create a stream from your input array
    .setOptions({maxParallel: 1})           // make sure you're running 1 call at a time
    .map(async (block) => yourAsyncFunction(block)) 
                                            // get the data asynchronously 
                                            // and return a stream of arrays
    .flatten()                              // last - turn your arrays into a stream of
                                            // contents

这应该是您在几行简单的行之后所追求的。 :)

【讨论】:

  • 目前我用事件实现了这个东西,可能也会尝试这个解决方案
  • 事件的问题是您必须手动控制流 - 暂停和恢复流 - 因为它不会等到下一个项目准备好。 Scramjet 为您完成所有这些工作,您只需返回一个 Promise - 它会使用它来跟踪并发和流量控制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
  • 2023-02-11
  • 1970-01-01
  • 2012-10-13
  • 2017-01-25
  • 2018-08-12
相关资源
最近更新 更多