使用 RxJS Observable 传输 JSON

2023-12-26

我正在尝试了解有关 RxJ 的一些事情。我想要做的是使用一些 JSON 数据,并在数据传入时立即开始在 DOM 上呈现该数据。我已经设置了流请求、响应和显示。它的输出一切都很好,但它是一次性完成的,而不是随着时间的推移。

我想开始在页面上显示数据,而不是等待整个文件完成然后立即显示,这会造成很长的等待时间。

//Cache the selector
var $resultList = $('.results');

//Gets the JSON (this will not be a static file,just for testing)
var requestStream = Rx.Observable.just("/results.json");

var responseStream = requestStream
    .flatMap(function(requestUrl) {
            return Rx.Observable.fromPromise(jQuery.getJSON(requestUrl))
             });

var displayStream = responseStream.subscribe(
    function(response) {
    //This maps to a Handlebars Template and puts it on the DOM
    $resultList.html(compiledTemplate(response)); 
            },
            function(err) {
                    console.log('Error: %s', err);
             },
             function() {
                    console.log('Completed');
             });




//Sample of the data from the JSON file
Object{
    beginIndex: "1"
    catId: "111"
    endIndex: "1"
    products: Array[100]

}

如果我理解得很好,有两点需要说明:

  1. 您需要找到一种方法来从该文件中获取对象流 当您读完该文件时,而不是一个大对象(I want to start showing the data on the page as its coming in)。这 其机制首先取决于源的结构(文件和文件读取机制) 比在 Rxjs 上(每一行都是一个可以导致信息的对象 显示等?)。一旦你有了“最小可显示信息单元”,你就可以在需要时使用 Rxjs 来缓冲/处理它(你想为每个对象或每 100 个对象显示一些内容,还是删除不必要的属性等?)
  2. 您需要逐步更新您的显示 当新数据到达时。这意味着你需要类似的东西$resultList.html($resultList.html() + compiledTemplate(response));附加新编译的html到旧的。

更新:为了对数组进行分块,你可以看看这个 jsfiddle :http://jsfiddle.net/429vw0za/ http://jsfiddle.net/429vw0za/

var ta_result = document.getElementById('ta_result');

function emits ( who, who_ ) {return function ( x ) {
 who.innerHTML = [who.innerHTML, who_ + " emits " + JSON.stringify(x)].join("\n");
};}

function fillArrayWithNumbers(n) {
        var arr = Array.apply(null, Array(n));
        return arr.map(function (x, i) { return {prop1: i, prop2:i, prop3:i} });
    }

var sampleObj = {
    beginIndex: "1",
    catId: "111",
    endIndex: "1",
    products: fillArrayWithNumbers(100)
}

console.log('sampleObj', sampleObj);

var result$ = Rx.Observable
  .from(sampleObj.products)
  .bufferWithCount(10)
  .map(function(mini_array){return {
  beginIndex: sampleObj.beginIndex,
  catId: sampleObj.catId,
  endIndex: sampleObj.endIndex,
  products: mini_array
  }})
  .do(emits(ta_result, 'result'));

result$.subscribe(function(){    });

然后,您将拥有从大小为 100 的数组中获取大小为 10 的数组的对象流。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 RxJS Observable 传输 JSON 的相关文章

随机推荐

  • Angular 2 AOT 构建错误 - JavaScript 堆内存不足

    我的 Angular 2 应用程序是由angular2 webpack 启动器 https www npmjs com package angular2 webpack starter 当我运行命令时npm run build aot构建A
  • pandas 上的数据框划分系列

    我需要划分矩阵的每一列df1进入矩阵的单列df2 得到一个有维数的矩阵df1 3 2 我需要一个结果 dataframe 1 6 2 7 3 8 3 6 4 7 5 8 df1 pd DataFrame data 1 2 3 3 4 5 i
  • 在批处理文件中逐行读取txt

    这是我的问题 我有一个 txt 文件 其中包含 100 个不同的视频名称 示例 abc mpg def mpg ghi mpg xyz mpg 我想使用一些命令逐一处理这些视频 并将结果放入同名的文件夹中 不带扩展名 command1 ab
  • 收集硬币并添加到 Sprite Kit 中的分数标签

    我正在尝试使用本教程作为参考 在我的游戏中实现一个简单的评分系统 http www raywenderlich com 87232 make game like mega jump sprite kit swift part 2 http
  • TagLib Sharp 不编辑艺术家

    我正在尝试将新的艺术家和标题 id3 标签保存到曲目中 从曲目加载标签工作正常 编辑曲目标题也工作正常 但是当我尝试编辑时演员 artist 它没有改变任何东西 这是代码 public void renameID3 string artis
  • 由于弃用而替换 self->isa

    我刚刚安装了 Xcode 4 6 现在我管理的古老代码中出现了新错误 编译器抱怨 直接访问 Objective C 的 isa 已被弃用 取而代之的是 object setClass 和 object getClass 并且该项目将无法构建
  • 如果 Vue 3 引用是对象的属性,则它们的行为会有所不同

    使用 Vue 3 的 Composition API 时 我注意到模板内部的引用在作为对象的属性进行访问时的行为有所不同 我认为这是最好的总结SFC Playground 中的这个示例 https sfc vuejs org eyJBcHA
  • F# 结构元组与 BCL 元组类型

    在 F 中你可以定义一个first函数如下 let first x y x 你可以这样称呼它 first 1 2 您还可以根据 BCL 定义相同的函数Tuple type let first t Tuple lt gt t Item1 但是
  • 如何使用 Github Actions 和语义发布 Github 插件发布整个目录?

    我想使用语义发布在 Github 版本上发布整个目录 构建目录 但不幸的是它将每个构建文件作为单个资产发布 对于复制 我正在使用 Vue CLI 生成项目vue create foo 安装语义释放作为开发依赖项npm install sav
  • 使用 VSTS 发布定义的蓝/绿部署

    我还没有看到任何有关如何在 VSTS 发布定义上进行蓝 绿部署的信息 我有一个 VSTS 发布定义 当我们的源代码中完成新的签入时 它会自动将新的更改部署到我们的 Prod 环境中 现在 该项目正在使用 Azure 流量管理器 并且添加了位
  • 枚举反向查找[重复]

    这个问题在这里已经有答案了 假设我有一个枚举 enum Color Red 1 Green Blue 如果我有一个号码 我可以通过这样做来获取枚举键 var colorName string Color 2 colorName Green
  • Python中使用os.walk()递归遍历目录

    我想从根目录导航到其中的所有其他目录并打印相同的内容 这是我的代码 usr bin python import os import fnmatch for root dir files in os walk print root print
  • ActiveModel::匿名类的验证

    我正在开发一个类似 DataMapper 的小型 ODM 项目 并且我正在尝试利用ActiveModel Validations成分 然而 我在编写测试时遇到了问题 我使用匿名类来构建我的测试模式 但是当涉及到运行验证器时 ActiveMo
  • 将 std::string ** 转换为 char *** 并且它恰好可以工作。如何?

    考虑以下代码 std vector
  • Python读取格式化字符串

    我有一个包含多行的文件 其格式如下 FIELD POSITION DATA TYPE COOP ID 1 6 Character LATITUDE 8 15 Real LONGITUDE 17 25 Real ELEVATION 27 32
  • jQuery 更改 iFrame 的内容

    我对使用 jQuery 完全陌生 为什么这不起作用 your browser needs to be updated 另外 我计划使用此 iFrame 向用户展示 html 文件更改的预览 我将在
  • Scala - 循环案例类名称以用作类型参数

    我在 Scala 代码 Scala 2 13 中有一个这样的函数 可以与 Spark 一起使用 def getDataset T lt Product TypeTag name String Dataset T import spark i
  • 运行TFS构建服务(NT AUTHORITY\NETWORK SERVICE)的帐户需要在发布管理服务器中添加为系统用户

    当我尝试从我的构建中触发发布时 我收到上述错误 构建可以自行运行 发布也可以自行运行 但我无法触发发布 我的问题是发布管理中没有系统用户这样的东西 存在一个服务用户 将上述用户设置为服务用户 它还被设置为发布管理器 它还位于 TFS 中的
  • 具有类型安全实现的 Java 泛型接口

    我正在寻找从通用框架调用特定接口的良好替代方案 我用代码来举例说明 看看问题部分 包含示例代码主要是为了彻底性 并将示例应用到实际场景中 Example 假设我们想要基于组件列表构建报告 假设我们有两种特定的组件类型 public inte
  • 使用 RxJS Observable 传输 JSON

    我正在尝试了解有关 RxJ 的一些事情 我想要做的是使用一些 JSON 数据 并在数据传入时立即开始在 DOM 上呈现该数据 我已经设置了流请求 响应和显示 它的输出一切都很好 但它是一次性完成的 而不是随着时间的推移 我想开始在页面上显示