JS:执行时间重叠的事件

JS: Executing events overlapping in time afteranother

我以正确的顺序即时接收事件,我想以正确的顺序处理它们(以及即时 - 所以不要先“存储”它们)。

以下示例无法运行,因为函数 someEventOccured() 可能会在非常接近的时间跨度内被多次调用。因此, handleEvent 的执行会在时间上重叠(我不希望这样)。当我写入 handleEvent() 中的文件时,我无法同时执行该函数并且需要维护顺序...

async someEventOccured(data:string){
   await handleEvent(data);
}

我已经尝试过使用 .then() 并存储承诺,但是我不知道如何等待之前的 .then() 完成...

非常感谢您的帮助<3

一般的方法是有一个共同的承诺排队到:

let queue = Promise.resolve();
function someEventOccured(data:string) {
  queue = queue.then(() => {
    return handleEvent(data);
  }).catch(err => {
    // ensure `queue` is never rejected or it'll stop processing events
    // …
  });
}

当然,这确实将 data 事件隐式存储在承诺链的闭包中。