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
事件隐式存储在承诺链的闭包中。
我以正确的顺序即时接收事件,我想以正确的顺序处理它们(以及即时 - 所以不要先“存储”它们)。
以下示例无法运行,因为函数 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
事件隐式存储在承诺链的闭包中。