Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS:一个接一个地执行时间重叠的事件_Javascript_Promise_Es6 Promise - Fatal编程技术网

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它将工作,因为它的承诺将被包装到
中。然后
,这会自动等待它…@MartinDallinger
handleEvent
应该是异步的,并返回一个承诺,否则整个队列是没有意义的谢谢你-这现在是有意义的-我只是不习惯语法,因此有点困惑。