КомпонентыFuture::finally

Future::finally

(PHP 8.6+, True Async 1.0)

php
public function finally(callable $finally): Future

Регистрирует callback, который выполняется при завершении 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 "Соединение закрыто\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("Ошибка: " . $e->getMessage());
    return [];
})
->finally(function() {
    echo "Операция завершена\n";
});

$result = $future->await();

См. также

  • Future::map — Трансформация результата Future
  • Future::catch — Обработка ошибки Future
  • Future::ignore — Игнорировать необработанные ошибки