首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Rxjs的debounceTime() over调用

使用Rxjs的debounceTime() over调用
EN

Stack Overflow用户
提问于 2016-12-26 14:05:45
回答 1查看 1.3K关注 0票数 1

我正试图理解rxjs,并被困在debounceTime(n /* ms */)实验中。

公共debounceTime(dueTime: number,调度程序:调度程序):可观察 只在某一特定时间跨度过去而没有另一源发射时,才能从源发出一个值。 来源

我的代码:

代码语言:javascript
运行
复制
function fakeAPI() {
    return new Rx.Observable(observer => {

    const root = 'https://jsonplaceholder.typicode.com'

    $.ajax({
      url: root + '/posts/1',
      method: 'GET'
    }).then(function(data) {
      observer.next(data)
    }).fail(function(err) {
      observer.error(err)
    })

    return ()=>{
      observer.complete()
      console.log('unsubscribed!')
    }
  })
}

const fakeObserver = fakeAPI()

$('#buttonText').click(()=>{

   fakeObserver
     .debounceTime(10000)
     .subscribe(() => {
        return {
          next(item) {
             console.log('received: ', item.id)
          },
          error(err) {
             console.log('error:', err)
          },
          complete() {
             console.log('completed!')
          }
       }
   }());  
})

我的期望是:即使在给定的时间内点击N次,API调用也只能进行一次。相反,它似乎在等待给定的时间,然后所有的N次点击都会产生一个API调用。

我做错了什么?

根据文档,如果源上有一个新值,那么debounceTime(n)应该丢弃先前待处理的延迟排放。

这是一个JSBin链路

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-26 14:25:02

根据文档,如果源上有一个新值,那么debounceTime(n)应该丢弃先前待处理的延迟排放。

这是真的,但每次单击时:

  1. 创建新的订阅
  2. 它调用api。
  3. Api返回结果
  4. debounceTime等待10 s(什么都不会发生,因为fakeObserver返回的observerable只发射一次)
  5. 记录结果

您需要在“可观察”中转换您的单击,以实现所需的内容:

代码语言:javascript
运行
复制
Rx.Observable.fromEvent(document.getElementById('buttonText'), 'click')

检查jsBin

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

https://stackoverflow.com/questions/41332419

复制
相关文章

相似问题

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