Skip to content
This repository was archived by the owner on Jan 9, 2024. It is now read-only.

ThreadedPromise Examples

Doge edited this page Sep 1, 2021 · 6 revisions

ThreadedPromise that returns a promise

$pool = new PromisePool($this);

$promise = new ThreadedPromise(
    function (): ThreadedPromise {
        return new ThreadedPromise(fn(string $response) => var_dump("a nested promise"));
    },
    function (ThreadedPromise $promise): void {
        /**
         * You can convert the ThreadedPromise to a regular Promise via @link ThreadedPromise::asPromise()
         */
        $promise->settle();
    }
);

$pool->addPromise($promise);

Coinbase API endpoint fetcher

$pool = new PromisePool($this);

$promise = new ThreadedPromise(
    function (): string {
        $request = Internet::getURL("https://api.coinbase.com/v2/currencies");
        return $request->getBody();
    }
);

$promise
    ->then(fn(string $response): array => json_decode($response, true))
    ->then(fn(array $response) => var_dump($response))
    ->catch(fn(PromiseError $error) => var_dump($error->getMessage()));

$pool->addPromise($promise);

Tell online players a random joke

$pool = new PromisePool($this);

$promise = new ThreadedPromise(
    function (): string {
        $request = Internet::getURL("https://v2.jokeapi.dev/joke/Any");
        return $request->getBody();
    },
    function (array $response): void {
        foreach ($this->getServer()->getOnlinePlayers() as $onlinePlayer) {
            $onlinePlayer->sendMessage($response["setup"]);
            $onlinePlayer->sendMessage($response["delivery"]);
        }
    }
);

$promise
    ->then(fn(string $response): array => json_decode($response, true))
    ->catch(fn(PromiseError $error) => var_dump($error->getMessage()));

$pool->addPromise($promise);
Clone this wiki locally