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

Ember.js 带有立即参数的Ember.run.debounce无法按预期工作,ember.js,debouncing,Ember.js,Debouncing,如果在immediate参数设置为true的情况下调用,则仅当以前从未调用过Ember.run.debounce时(至少使用相同的上下文和函数参数),该函数才起作用。我所说的“it works”是指“它触发传递的函数” 这就是证明这种行为的方法 单击div一次,等待1秒并按预期发出火灾警报。但是连续的点击没有任何作用。它只是第一次开火。如果您在1秒内多次单击,它不会显示任何警报窗口,因为debounce被多次调用。如果您根本不使用immediate参数,那么一切都会按预期工作 这真的是一个正确的

如果在
immediate
参数设置为true的情况下调用,则仅当以前从未调用过
Ember.run.debounce
时(至少使用相同的上下文和函数参数),该函数才起作用。我所说的“it works”是指“它触发传递的函数”

这就是证明这种行为的方法

单击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;
接下来,这是固定在最新的金丝雀建设


我正在为此制定一份PR,它似乎是一个足够简单的用例。