RxJs可观察到的分页

jjuser19jj

第一:这是我使用RxJ的第一个项目,我认为我会通过使用它学习得最好。

我找到了这个答案:使用RxJs将分页的请求转换为可观察的流,但是它在注释中说:

您仍然超出了最大调用堆栈数。返回约430页。我认为递归可能不是最好的解决方案

我想查询Youtube Data API,结果返回到页面中,我需要对它们进行分页。我想象过这样的工作流程可以正常工作:1)发起调用2)检查响应是否具有“ nextPageToken” 3)如果具有,则向Youtube API发出另一个请求4)如果没有,请完成

So to do this I could Imagine the following Observables / streams:
FirstRequestStream -A-X--------------->
ResponseStream     -A-A-A-A--X-------->
RequestStream      -I-A-I-A----------->
A = Action
I = Info from upper stream
X = Termination

(不确定此图是否与我的制作方法相符)

因此,ResponseStream依赖于FirstRequestStream和RequestStream(使用合并功能)。RequestStream依赖于ResponseStream(这称为循环可观察的吗?)

-这是正确的方法吗?

-“传播可观察物”是好事,甚至可能吗?(我在创建一个可观察物时遇到问题)。

-我应该先尝试其他方法吗?

-是否可以创建相互依赖的可观察流?

谢谢您的帮助。

奥勒斯·萨卢克(Oles Savluk)

您使此问题过于复杂,可以使用defer运算符更轻松地解决它。

想法是您要创建延迟的可观察对象(因此将创建它,并且仅在订阅后才开始获取数据),并使用相同的可观察对象将其连接,但对于下一页,该对象也将与下一页连接,依此类推。 。所有这些都可以不递归地完成。

代码如下:

const { defer, from, concat, EMPTY, timer } = rxjs; // = require("rxjs")
const { mergeMap, take, mapTo, tap } = rxjs.operators; // = require("rxjs/operators")

// simulate network request
function fetchPage(page=0) {
  return timer(100).pipe(
    tap(() => console.log(`-> fetched page ${page}`)),
    mapTo({
      items: Array.from({ length: 10 }).map((_, i) => page * 10 + i),
      nextPage: page + 1,
    })
  );
}

const getItems = page => defer(() => fetchPage(page)).pipe(
  mergeMap(({ items, nextPage }) => {
    const items$ = from(items);
    const next$ = nextPage ? getItems(nextPage) : EMPTY;
    return concat(items$, next$);
  })
);

// process only first 30 items, without fetching all of the data
getItems()
 .pipe(take(30))
 .subscribe(e => console.log(e));
<script src="https://unpkg.com/[email protected]/bundles/rxjs.umd.min.js"></script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

RXJS可观察到的doSomething onComplete

来自分类Dev

RxJs数组可观察到的数组

来自分类Dev

重新调用返回可观察到的Rxjs的函数

来自分类Dev

RxJs从产生的承诺中创建可观察到的

来自分类Dev

angular2 rxjs可观察到的forkjoin

来自分类Dev

从HttpModule中可观察到的RxJS检索数据

来自分类Dev

RXJS可观察到的删除管道运算符

来自分类Dev

Angular RxJS-无法使冷可观察到热

来自分类Dev

RxJS-可观察到的模型对象

来自分类Dev

可观察到使用共享的RxJS重新连接WebSocket

来自分类Dev

angular2 rxjs可观察到的forkjoin

来自分类Dev

RxJS键入错误缺少可观察到的

来自分类Dev

可观察到可观察的顺序

来自分类Dev

可观察到的createasync

来自分类Dev

可观察到的错误

来自分类Dev

如何在可观看Redux的史诗中链接可观察到的RxJS?

来自分类Dev

角度2可观察到可观察[]

来自分类Dev

转换可观察到列表

来自分类Dev

可观察到RxJava的后备

来自分类Dev

角度2可观察到的间隔

来自分类Dev

Firebase中可观察到的后端?

来自分类Dev

垫台变化可观察到

来自分类Dev

可观察到的FromEventPattern INotifyCollectionChanged错误

来自分类Dev

返回可观察到的延期

来自分类Dev

在Java中可观察到的null

来自分类Dev

动态缓存可观察到API

来自分类Dev

合并可观察到的排放

来自分类Dev

从 eventListener 可观察到的角度返回

来自分类Dev

如何仅重试RxJs中可观察到的源发出的某些错误