首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxJS 5定时缓存

RxJS 5定时缓存
EN

Stack Overflow用户
提问于 2016-05-10 19:48:28
回答 1查看 613关注 0票数 1

我正在尝试使用窗口上的postMessagemessage事件,让时间过期缓存为抽象“请求-响应”的可观察对象工作。

远程窗口期望消息getItemList,并用{type: 'itemList', data: []}类型的消息对其进行回复。

我想以这样一种方式对itemList$可观察对象建模,即它将最后一个结果缓存3秒,以便在这段时间内不会发出新的请求,然而,我想不出一种优雅(读取,一个可观察对象-没有主题)和简洁的方式来实现这一点的方法。

以下是代码中的示例:

代码语言:javascript
复制
const remote = someIframe.contentWindow;
const getPayload = message => message.data;
const ofType = type => message => message.type === type;

// all messages coming in from the remote iframe
const messages$ = Observable.fromEvent(window, 'message')
  .map(getPayload)
  .map(JSON.parse);

// the observable of (cached) items
const itemList$ = Observable.defer(() => {
    console.log('sending request');

    // sending a request here, should happen once every 3 seconds at most
    remote.postMessage('getItemList');

    // listening to remote messages with the type `itemList`
    return messages$
      .filter(ofType('itemList'))
      .map(getPayload);
  })
  .cache(1, 3000);

/**
 * Always returns a promise of the list of items
 * @returns {Promise<T>}
 */
function getItemList() {
  return itemList$
    .first()
    .toPromise();
}


// poll every second
setInterval(() => {
  getItemList()
    .then(response => console.log('got response', response));
}, 1000);

我知道the (very similar) question,但我想知道是否有人可以在没有明确主题的情况下提出解决方案。

提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2016-07-27 19:30:48

我相信你在找rxjs运营商throttle

Documentation on rxjs github repo

返回一个可观察对象,该对象在指定持续时间的连续时间窗口内仅发出源可观察对象发出的第一个项。

基本上,如果你想等到输入静默一段时间后再采取行动,你会想要对进行去抖动。

如果您根本不想等待,但又不希望在特定的时间内执行1个以上的查询,那么您将希望对进行。从您的用例来看,我认为您应该对进行限制

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

https://stackoverflow.com/questions/37137669

复制
相关文章

相似问题

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