我正在尝试实现一个与 javascript 中的承诺一起使用的去抖功能。这样,每个调用者都可以使用 Promise 使用“去抖动”函数的结果。这是迄今为止我能想到的最好的:
function debounce(inner, ms = 0) {
let timer = null;
let promise = null;
const events = new EventEmitter(); // do I really need this?
return function (...args) {
if (timer == null) {
promise = new Promise(resolve => {
events.once('done', resolve);
});
} else {
clearTimeout(timer);
}
timer = setTimeout(() => {
events.emit('done', inner(...args));
timer = null;
}, ms);
return promise;
};
}
理想情况下,我想 在不 引入对 EventEmitter 的依赖(或实现我自己的 EventEmitter 的基本版本)的情况下实现此实用程序功能,但我想不出一种方法来实现它。有什么想法吗?
原文由 Chris 发布,翻译遵循 CC BY-SA 4.0 许可协议
我找到了一个更好的方法来实现这个承诺:
我仍然欢迎提出建议,但新的实现回答了我最初关于如何在不依赖 EventEmitter(或类似的东西)的情况下实现此功能的问题。