{"id":18264338,"url":"https://github.com/cooldogepm/libpromise","last_synced_at":"2025-04-04T20:31:33.201Z","repository":{"id":45044018,"uuid":"401504840","full_name":"cooldogepm/libPromise","owner":"cooldogepm","description":"A minimalistic implementation of Promises for PHP","archived":true,"fork":false,"pushed_at":"2023-05-06T17:41:35.000Z","size":79,"stargazers_count":12,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-02-28T18:08:55.619Z","etag":null,"topics":["php","promise","promise-chain","promise-library","threading"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cooldogepm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-08-30T22:40:08.000Z","updated_at":"2024-01-09T15:35:39.000Z","dependencies_parsed_at":"2024-11-05T11:16:04.459Z","dependency_job_id":null,"html_url":"https://github.com/cooldogepm/libPromise","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cooldogepm%2FlibPromise","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cooldogepm%2FlibPromise/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cooldogepm%2FlibPromise/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cooldogepm%2FlibPromise/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cooldogepm","download_url":"https://codeload.github.com/cooldogepm/libPromise/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247246451,"owners_count":20907801,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["php","promise","promise-chain","promise-library","threading"],"created_at":"2024-11-05T11:14:24.269Z","updated_at":"2025-04-04T20:31:32.419Z","avatar_url":"https://github.com/cooldogepm.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# libPromise\n\nA minimalistic implementation of [Promises](https://en.wikipedia.org/wiki/Futures_and_promises) for PHP.\n\n## Installation via DEVirion\n\nInstall the [DEVirion](https://poggit.pmmp.io/ci/poggit/devirion/DEVirion) plugin and start your server. This will create a `virions` folder in your server's root directory.\n\n```\nserver_root\n| -\u003e plugins\n|    --\u003e DEVirion.phar\n| -\u003e virions\n```\n\n- Download pre-compiled `.phar` files can be downloaded from [poggit](https://poggit.pmmp.io/ci/cooldogedev/libPromise/libPromise).\n- Place the pre-compiled `.phar` in the `virions` directory\n\n## Running from source code\n\nClone the repository via git `git clone git@github.com:cooldogedev/libPromise.git`. This will create a `libPromise` folder in your directory.\n\n```\nyour_plugin\n| -\u003e src\n|    --\u003e cooldogedev\n|       --\u003e libPromise\n```\n\n- Place the `cooldogedev\\libPromise` folder in your `src` directory.\n\n## Promise Examples\n\n### Hello world\n\n```php\n$promise = new Promise(\n    function (): string {\n        return \"Hello world\";\n    }\n);\n\n$promise\n    -\u003ethen(fn(string $response) =\u003e var_dump($response))\n    -\u003esettle();\n```\n\n### JSON decoder\n\n```php\n$promise = new Promise(\n    function (): string {\n        $person = [\n            \"name\" =\u003e \"john\",\n            \"lastName\" =\u003e \"smith\",\n            \"age\" =\u003e 40\n        ];\n\n        return json_encode($person);\n    }\n);\n\n$promise\n    -\u003ethen(fn(string $response): array =\u003e json_decode($response, true))\n    -\u003ethen(fn(array $response) =\u003e var_dump($response))\n    -\u003esettle();\n```\n\n## ThreadedPromise Examples\n\n### ThreadedPromise that returns a promise\n\n```php\n$pool = new PromisePool($this);\n\n$promise = new ThreadedPromise(\n    function (): ThreadedPromise {\n        return new ThreadedPromise(fn(string $response) =\u003e var_dump(\"a nested promise\"));\n    },\n    function (ThreadedPromise $promise): void {\n        /**\n         * You can convert the ThreadedPromise to a regular Promise via @link ThreadedPromise::asPromise()\n         */\n        $promise-\u003esettle();\n    }\n);\n\n$pool-\u003eaddPromise($promise);\n```\n\n### Coinbase API endpoint fetcher\n\n```php\n$pool = new PromisePool($this);\n\n$promise = new ThreadedPromise(\n    function (): string {\n        $request = Internet::getURL(\"https://api.coinbase.com/v2/currencies\");\n        return $request-\u003egetBody();\n    }\n);\n\n$promise\n    -\u003ethen(fn(string $response): array =\u003e json_decode($response, true))\n    -\u003ethen(fn(array $response) =\u003e var_dump($response))\n    -\u003ecatch(fn(PromiseError $error) =\u003e var_dump($error-\u003egetMessage()));\n\n$pool-\u003eaddPromise($promise);\n```\n\n### Tell online players a random joke\n\n```php\n$pool = new PromisePool($this);\n\n$promise = new ThreadedPromise(\n    function (): string {\n        $request = Internet::getURL(\"https://v2.jokeapi.dev/joke/Any\");\n        return $request-\u003egetBody();\n    },\n    function (array $response): void {\n        foreach ($this-\u003egetServer()-\u003egetOnlinePlayers() as $onlinePlayer) {\n            $onlinePlayer-\u003esendMessage($response[\"setup\"]);\n            $onlinePlayer-\u003esendMessage($response[\"delivery\"]);\n        }\n    }\n);\n\n$promise\n    -\u003ethen(fn(string $response): array =\u003e json_decode($response, true))\n    -\u003ecatch(fn(PromiseError $error) =\u003e var_dump($error-\u003egetMessage()));\n\n$pool-\u003eaddPromise($promise);\n```\n\n### Projects using libPromise\n- [libSQL](https://github.com/cooldogedev/libSQL)\n- [BedrockEconomy](https://github.com/cooldogedev/BedrockEconomy)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcooldogepm%2Flibpromise","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcooldogepm%2Flibpromise","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcooldogepm%2Flibpromise/lists"}