@ארכיטקט
בעיני הרבה יותר קל - קצר - נקי - אלגנטי להרים Flag בעת הפעלת הלחיצה ולכבות אותו בסיום הפעולה (או לאחר timeout קטן), ולשים תנאי שהפונקציה לא תתבצע אם הFlag נמצא.
נכון זה לא כ"כ גנרי (צריך לממש כל פעם), אבל עדיין...
let flag;
async function doSomething () {
if (flag) return;
flag = true;
await doAnything...
await someTimeout... // Optional
flag = false;
}
<button onclick="doSomething()">Do</button>
בעיקר מה שהכי יפה פה, זה שהתנאי להחרגה לא תלוי בזמן (שזה לא כ"כ מאפיין את הבעיה) אלא תלוי בשאלה היחידה הרלוונטית: האם הפעולה הסתיימה או שעדיין לא.