Future::catch

(PHP 8.6+, True Async 1.0)

public function catch(callable $catch): Future

Registriert einen Fehlerbehandler für das Future. Der Callback wird aufgerufen, wenn das Future mit einer Ausnahme abgeschlossen wurde. Wenn der Callback einen Wert zurückgibt, wird dieser zum Ergebnis des neuen Future. Wenn der Callback eine Ausnahme wirft, wird das neue Future mit diesem Fehler abgeschlossen.

Parameter

catch — die Fehlerbehandlungsfunktion. Empfängt ein Throwable, kann einen Wert zur Wiederherstellung zurückgeben. Signatur: function(\Throwable $e): mixed.

Rückgabewert

Future — ein neues Future mit dem Ergebnis der Fehlerbehandlung, oder mit dem ursprünglichen Wert, wenn kein Fehler vorlag.

Beispiele

Beispiel #1 Fehlerbehandlung mit Wiederherstellung

<?php

use Async\Future;

$future = Future::failed(new \RuntimeException("Dienst nicht verfügbar"))
    ->catch(function(\Throwable $e) {
        echo "Fehler: " . $e->getMessage() . "\n";
        return "Standardwert"; // Wiederherstellung
    });

$result = $future->await();
echo $result; // Standardwert

Beispiel #2 Fehler bei asynchronen Operationen abfangen

<?php

use Async\Future;

$future = \Async\async(function() {
    $response = httpGet('https://api.example.com/users');
    if ($response->status !== 200) {
        throw new \RuntimeException("HTTP-Fehler: {$response->status}");
    }
    return json_decode($response->body, true);
})
->catch(function(\Throwable $e) {
    // Den Fehler protokollieren und ein leeres Array zurückgeben
    error_log("API-Fehler: " . $e->getMessage());
    return [];
})
->map(function(array $users) {
    return count($users);
});

$count = $future->await();
echo "Gefundene Benutzer: $count\n";

Siehe auch