This commit is contained in:
Dylan K. Taylor 2024-11-13 22:55:08 +00:00
parent edae9f26e4
commit 11fdf79a7c
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D

View File

@ -60,7 +60,12 @@ abstract class AsyncEvent{
/** @phpstan-var PromiseResolver<static> $globalResolver */ /** @phpstan-var PromiseResolver<static> $globalResolver */
$globalResolver = new PromiseResolver(); $globalResolver = new PromiseResolver();
$this->processRemainingHandlers(AsyncHandlerListManager::global()->getHandlersFor(static::class), $globalResolver); $handlers = AsyncHandlerListManager::global()->getHandlersFor(static::class);
if(count($handlers) > 0){
$this->processRemainingHandlers($handlers, fn() => $globalResolver->resolve($this), $globalResolver->reject(...));
}else{
$globalResolver->resolve($this);
}
return $globalResolver->getPromise(); return $globalResolver->getPromise();
}finally{ }finally{
@ -71,9 +76,10 @@ abstract class AsyncEvent{
/** /**
* @param AsyncRegisteredListener[] $handlers * @param AsyncRegisteredListener[] $handlers
* @phpstan-param PromiseResolver<static> $globalResolver * @phpstan-param \Closure() : void $resolve
* @phpstan-param \Closure() : void $reject
*/ */
private function processRemainingHandlers(array $handlers, PromiseResolver $globalResolver) : void{ private function processRemainingHandlers(array $handlers, \Closure $resolve, \Closure $reject) : void{
$currentPriority = null; $currentPriority = null;
$awaitPromises = []; $awaitPromises = [];
foreach($handlers as $k => $handler){ foreach($handlers as $k => $handler){
@ -100,8 +106,8 @@ abstract class AsyncEvent{
$promise = $handler->callAsync($this); $promise = $handler->callAsync($this);
if($promise !== null){ if($promise !== null){
$promise->onCompletion( $promise->onCompletion(
onSuccess: fn() => $this->processRemainingHandlers($handlers, $globalResolver), onSuccess: fn() => $this->processRemainingHandlers($handlers, $resolve, $reject),
onFailure: $globalResolver->reject(...) onFailure: $reject
); );
return; return;
} }
@ -110,11 +116,11 @@ abstract class AsyncEvent{
if(count($awaitPromises) > 0){ if(count($awaitPromises) > 0){
Promise::all($awaitPromises)->onCompletion( Promise::all($awaitPromises)->onCompletion(
onSuccess: fn() => $this->processRemainingHandlers($handlers, $globalResolver), onSuccess: fn() => $this->processRemainingHandlers($handlers, $resolve, $reject),
onFailure: $globalResolver->reject(...) onFailure: $reject
); );
}else{ }else{
$globalResolver->resolve($this); $resolve();
} }
} }
} }