Javascript JS:一个接一个地执行时间重叠的事件
我以正确的顺序在运行中接收事件,我希望一个接一个地处理它们(以及在运行中——所以不要先“存储”它们) 以下示例不起作用,因为函数Javascript JS:一个接一个地执行时间重叠的事件,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,我以正确的顺序在运行中接收事件,我希望一个接一个地处理它们(以及在运行中——所以不要先“存储”它们) 以下示例不起作用,因为函数someEventOccursed()可以在非常接近的时间跨度内多次调用。因此,handleEvent的执行将在时间上重叠(我不希望如此)。当我在handleEvent()中写入文件时,我不能同时执行函数并需要维护顺序 async SomeEvent发生(数据:字符串){ 等待处理事件(数据); } 我已经尝试使用.then()并存储承诺,但是我不知道如何等待上一个.
someEventOccursed()
可以在非常接近的时间跨度内多次调用。因此,handleEvent的执行将在时间上重叠(我不希望如此)。当我在handleEvent()
中写入文件时,我不能同时执行函数并需要维护顺序
async SomeEvent发生(数据:字符串){
等待处理事件(数据);
}
我已经尝试使用.then()并存储承诺,但是我不知道如何等待上一个.then()完成
非常感谢您的帮助一般做法是共同承诺排队:
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
// …
});
}
当然,这确实隐式地将
数据
事件存储在承诺链上的闭包中。如果handleEvent是异步的呢?@MartinDallinger它将工作,因为它的承诺将被包装到中。然后
,这会自动等待它…@MartinDallingerhandleEvent
应该是异步的,并返回一个承诺,否则整个队列是没有意义的谢谢你-这现在是有意义的-我只是不习惯语法,因此有点困惑。