Rxswift3.0中的油门和反跳有什么区别?

Longshihua

我看过很多关于油门和反跳的博客。他们大多数人说他们是同一回事。但是我的示例得到了不同的结果吗?这是示例:

let disposeBag = DisposeBag()
Observable.of(1,2,3,4,5)
          .debounce(1, scheduler: MainScheduler.instance)
          .subscribe(onNext: {print($0)})
          .addDisposableTo(disposeBag)

结果是5。但是当我使用油门时,结果是1

let disposeBag = DisposeBag()
Observable.of(1,2,3,4,5)
        .throttle(1, scheduler: MainScheduler.instance)
        .subscribe(onNext: {print($0)})
        .addDisposableTo(disposeBag)

所以,我不了解油门操作器吗?

Paulw11

在早期版本的RxSwift中,throttledebounce做了同样的事情,这就是为什么您会看到文章说明这一点的原因。在RxSwift 3.0中,它们执行相似但相反的操作。

两者debouncethrottle用来由可观察到的随着时间的推移发射过滤项。

  • throttle 仅发射在时间窗口中可观察到的源发射的第一项。

  • debounce 仅在经过指定的时间段后才发射一个项目,而可观察到的源没有发射另一个项目。

两者都可用于减少可观察对象发射的项目数量。使用哪个参数取决于您要在一个时间段内发出“第一个”还是“最后一个”值。

术语“反跳”来自电子产品,是指当发生开关动作时,开关触点在接通和断开之间迅速“反弹”的趋势。当您打开灯泡时,您不会注意到这一点,但是微处理器在每秒几千次查看输入时,会在开关进入最终状态之前看到快速的“开”和“关”序列。这就是为什么debounce给您带来价值的原因5在您的时间范围内(1毫秒)发出的最后一个项目。如果您在代码中设置了时间延迟,以使项目发出的速度更慢(相距超过1毫秒),您将看到由发出的许多项目debounce

在应用程序中,您可以debounce用来执行昂贵的搜索(例如需要进行网络操作)。用户将在其搜索字符串中键入许多字符,但是您不希望在输入每个字符时启动搜索,因为搜索成本高昂,并且返回之前,较早的结果将被淘汰。使用debounce该命令可以确保仅在用户停止输入一段时间(例如500毫秒)后才发出搜索字符串。

您可能会throttle在某个操作需要花费一些时间的地方使用它,并且想要在该时间过去之前忽略进一步的输入。假设您有一个启动操作的按钮。如果用户快速连续多次单击按钮,则您只想启动一次操作。您可以throttle用来忽略指定时间窗口内的后续拍子。debounce也可以使用,但会在发出操作项之前引入延迟,同时throttle允许您对第一个操作做出反应,而忽略其余操作。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

RxSwift-反跳/油门“反”

RxSwift中的PublishSubject和PublishRelay有什么区别?

Python 3中的int()和floor()有什么区别?

python 3中的pickle和_pickle有什么区别?

Cakephp 3中的特征和行为有什么区别?

reg [7:0] a [3:0] 和 reg [7:0] a [0:3] 有什么区别

RxSwift中的merge和flatmap运算符有什么区别

[0,1,2,3,4]和[[0],[1],[2],[3],[4]]和有什么区别?

Scheme中的'('()2 3)和'(()2 3)有什么区别?

auto a = A(3)和A a(3)有什么区别?

3/2和-3/2有什么区别?

`{'x'=> 3}`和`{x:3}`有什么区别?

Python 3中的“函数”,“方法”和“绑定方法”之间有什么区别?

Shell脚本中的“ for i”和“ for in 1 2 3 4”之间有什么区别?

SVG和D3中的CX,CY与变换,有什么区别?

命令行中的关键字“ python”和“ python3”有什么区别?

AWS S3中的对象和对象ACL有什么区别?

PYTHON 3中的float(44 * 2.2)和(float)(44 * 2.2)有什么区别?

cakephp v3.x中的存储库和表对象有什么区别?

VB中的form2.Close()和Form3.ActiveForm.Close()有什么区别

boto3中的terminate_instances()和terminate()有什么区别?

Python 3中的raw_input()和input()有什么区别?

Spring Security 3中的@Secured和@PreAuthorize有什么区别?

Swift 3中的Any,Hashable和AnyHashable有什么区别?

Bazel构建(或GCC)中的“ -c opt”和“ --copt = -O3”有什么区别

3层架构样式(包括MVC)中的DAL,DTO和DAO有什么区别

python 3中的`print(x)`和`print(* x)`有什么区别?

TYPO3流体中的f:link和f:uri ViewHelpers有什么区别

python 3集中的Discard()和Remove()函数有什么区别