带有即时参数的 Ember.run.debounce 无法按预期工作



如果你调用Ember.run.debounce immediate参数设置为 true,则它只有在以前从未调用过Ember.run.debounce时才有效(至少使用相同的上下文和函数参数)。我所说的"它有效"是指"它触发传递的函数"。

这是演示此行为的 JS Bin 。

单击div 一次,等待 1 秒钟,然后按预期发出警报。但是连续的点击没有任何作用。它只是第一次触发。如果在 1 秒内多次单击,它不会显示任何警报窗口,因为debounce被多次调用。如果根本不使用 immediate 参数,则一切将按预期工作。

这真的是一种正确的行为还是我错过了什么?

问题在于从不立即切换到立即不是编程方案。 或者你可以说该功能不是为处理切换而构建的。

直接工作流是立即运行代码,并阻止代码的任何实例运行,直到超时过期。 因此,当您传入非即时,然后快速发送另一个即时时,它会从队列中删除非即时(假设它已经运行),然后只阻止额外的 1000 毫秒(根据即时工作流)。

您可以通过立即更改时间来轻松解决此问题。

var timeout = this.immediate?1:10000;
Ember.run.debounce(this, this.alertMe, timeout);
// Run immediately for further clicks
this.immediate = true;

后续,这在最新的金丝雀版本中已修复。

http://jsbin.com/ucanam/2511/edit

最新更新