컴포넌트Future::finally

Future::finally

(PHP 8.6+, True Async 1.0)

php
public function finally(callable $finally): Future

Future가 완료될 때 결과에 관계없이 실행되는 콜백을 등록합니다 --- 성공, 오류 또는 취소 모두 해당됩니다. Future는 원래와 동일한 값 또는 오류로 해결됩니다. 리소스 해제에 유용합니다.

매개변수

finally — 완료 시 실행할 함수. 인수를 받지 않습니다. 시그니처: function(): void.

반환값

Future — 원래와 동일한 값 또는 오류로 완료되는 새 Future.

예제

예제 #1 리소스 해제

php
<?php

use Async\Future;
use Async\FutureState;

$connection = openDatabaseConnection();

$state  = new FutureState();
$source = new Future($state);

\Async\spawn(function() use ($state, $connection) {
    $state->complete($connection->query("SELECT * FROM users"));
});

$future = $source
    ->finally(function() use ($connection) {
    $connection->close();
    echo "Connection closed\n";
});

$users = $future->await();

예제 #2 map, catch, finally 체이닝

php
<?php

use Async\Future;
use Async\FutureState;

$state  = new FutureState();
$source = new Future($state);

\Async\spawn(function() use ($state) {
    $state->complete(fetchDataFromApi());
});

$future = $source
    ->map(fn($data) => processData($data))
->catch(function(\Throwable $e) {
    error_log("Error: " . $e->getMessage());
    return [];
})
->finally(function() {
    echo "Operation completed\n";
});

$result = $future->await();

같이 보기