私はjavascriptで約束しているデバウンス機能を実装しようとしています。こうすることで、各呼び出し側はPromiseを使用して「デバウンス」機能の結果を消費することができます。私が持つEventEmitterへの依存性を導入(または持つEventEmitterの自分自身の基本的なバージョンを実装する)せずにこのユーティリティ関数を実装したいと思い、理想的には約束で実装されたデバウンス機能
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;
};
}
:ここで私はこれまで思い付くことができた最高ですしかし、私はそれをする方法を考えることができません。何かご意見は?
どのように 'debounce'機能が使用されようとしていますか? – Aprillion
「内部」とは何ですか? – thefourtheye
@Aprillionこれは、[lodash](https://lodash.com/docs#debounce)で提供されているデバウンス機能のように、標準のデバウンス機能として使用されます。ただし、呼び出し元が内部の戻り値にアクセスできるようにしたい機能を約束する。それはあなたの質問に答えますか?もしそうでなければ、私はさらに精緻化することができます。 – Chris