如果您在immediate
参数设置为true的情况下调用Ember.run.debounce
,则只有在以前未调用 Ember.run.debounce
时才会调用(至少在相同的上下文中和函数参数)。并且通过“它起作用”我的意思是“它会触发传递的函数”。
这是JS Bin证明了这种行为。
点击div 一次,等待1秒,然后按预期警告火警。但连续点击什么都不做。它只是第一次发射。如果您在1秒钟内多次单击,则不会显示任何警报窗口,因为debounce
被多次调用。如果您根本不使用immediate
参数,则一切都按预期工作。
这真的是一种正确的行为,还是我错过了什么?
答案 0 :(得分:0)
问题是从非立即切换到立即不是编程方案。或者您可以说功能不是为了处理切换而构建的。
立即工作流程是立即运行代码,并阻止任何代码实例运行,直到超时到期。因此,当您传入非立即数然后快速发送另一个立即数时,它会从队列中删除非立即数(假设它已经运行),然后再阻塞1000毫秒(根据即时工作流程)。
你可以通过立即改变你的时间来轻松解决这个问题。
var timeout = this.immediate?1:10000;
Ember.run.debounce(this, this.alertMe, timeout);
// Run immediately for further clicks
this.immediate = true;
跟进,这是在最新的金丝雀版本中修复的。