我对 Cocoa 了解不多,但我假设它会用最新事件替换旧事件,直到事件能够被分派给应用程序(即,如果应用程序由于某种原因忙)。我不确定您的特定用例是什么,但是如果您想对事件进行速率限制,我会这样使用setTimeout
:
function Dispatcher(controllers) {
this.controllers = controllers;
this.events = [];
this.nextController = 0;
}
Dispatcher.prototype = {
_dispatch: function (i) {
var ev = this.events.splice(i, 1);
this.controllers[this.nextController].handle(ev);
this.nextController = (this.nextController + 1) % this.controllers.length;
},
notify: function (ev) {
var index = -1, self = this, replace;
function similer(e, i) {
if (e.type === ev.type) {
index = i;
return true;
}
}
replace = this.events.some(similar);
if (replace) {
this.events[i] = ev;
} else {
// it's unique
index = this.events.push(ev) - 1;
setTimeout(function () {
self._dispatch(index);
}, 100);
}
}
};
只需调用notify
事件(确保有type
属性或类似属性),它就会处理魔法。不同类型的事件将用自己的setTimeout
.
我还没有测试过这段代码,所以可能有错误。