mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-08-11 22:08:42 +00:00
...
This commit is contained in:
parent
edae9f26e4
commit
11fdf79a7c
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user