{"id":21294407,"url":"https://github.com/carno-php/promise","last_synced_at":"2025-07-03T09:31:33.165Z","repository":{"id":62499822,"uuid":"144820588","full_name":"carno-php/promise","owner":"carno-php","description":null,"archived":false,"fork":false,"pushed_at":"2019-07-30T02:14:47.000Z","size":17,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-15T17:12:08.823Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/carno-php.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}},"created_at":"2018-08-15T07:30:22.000Z","updated_at":"2019-07-26T02:28:47.000Z","dependencies_parsed_at":"2022-11-02T12:00:56.747Z","dependency_job_id":null,"html_url":"https://github.com/carno-php/promise","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/carno-php/promise","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carno-php%2Fpromise","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carno-php%2Fpromise/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carno-php%2Fpromise/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carno-php%2Fpromise/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/carno-php","download_url":"https://codeload.github.com/carno-php/promise/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carno-php%2Fpromise/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263300188,"owners_count":23445195,"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":[],"created_at":"2024-11-21T13:59:08.957Z","updated_at":"2025-07-03T09:31:33.134Z","avatar_url":"https://github.com/carno-php.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Promise - component of carno-php\n\n# Features\n\n- [Promises/A+](https://promisesaplus.com/) standards\n- Addition commands e.g. race, all\n- Simple and fast\n\n# Installation\n\n```bash\ncomposer require carno-php/promise\n```\n\n# API \u0026 Usages\n\n#### new Promise\n\nCreates a promise with initialize executor\n\n```php\n$promise = new Promise(static function (Promised $promise) {\n    if (1) {\n        $promise-\u003eresolve('success');\n    } else {\n        $promise-\u003ereject('error');\n    }\n});\n$promise-\u003ethen(function () {\n    echo 'promise has been resolved', PHP_EOL;\n}, function () {\n    echo 'promise has been rejected', PHP_EOL;\n});\n```\n\n#### Promise::deferred\n\nCreates a defer resolve promise\n\n```php\n$promise = Promise::deferred();\n$promise-\u003ethen(function (string $var) {\n    echo $var, PHP_EOL;\n});\n$promise-\u003eresolve('var');\n```\n\n#### Promise::resolved\n\nCreates a resolved promise\n\n```php\n$promise = Promise::resolved('var');\n$promise-\u003ethen(function (string $var) {\n    echo $var, PHP_EOL;\n});\n```\n\n#### Promise::rejected\n\nCreates a rejected promise\n\n```php\n$promise = Promise::rejected(new Exception('Test'));\n$promise-\u003ecatch(function (Throwable $e) {\n    echo 'failure with ', $e-\u003egetMessage(), PHP_EOL;\n});\n```\n\n#### Promise::all\n\n\u003e Returns a single promise that resolves when all of the promises in the argument have resolved or when the argument contains no promises. It rejects with the reason of the first promise that rejects.\n\n```php\n$p1 = Promise::deferred();\n$p2 = Promise::deferred();\n$pa = Promise::all($p1, $p2);\n$pa-\u003ethen(function (array $results) {\n    echo 'all resovled with results ', var_export($results, true), PHP_EOL;\n});\n$p1-\u003eresolve('var1');\n$p2-\u003eresolve('var2');\n```\n\n#### Promise::race\n\n\u003e Returns a promise that resolves or rejects as soon as one of the promises in the argument resolves or rejects, with the value or reason from that promise.\n\n```php\n$p1 = Promise::deferred();\n$p1-\u003ethen(function () {\n    echo 'p1 has been resolved', PHP_EOL;\n}, function () {\n    echo 'p1 has been rejected', PHP_EOL;\n});\n$p2 = Promise::deferred();\n$p2-\u003ethen(function () {\n    echo 'p2 has been resolved', PHP_EOL;\n}, function () {\n    echo 'p2 has been rejected', PHP_EOL;\n});\n$pr = Promise::race($p1, $p2);\n$pr-\u003ethen(function (string $var) {\n    echo 'race result is ', $var, PHP_EOL;\n});\n$p1-\u003eresolve('test');\n// or $p2-\u003ereject();\n```\n\n#### Promise-\u003epended\n\nCheck that promise is neither fulfilled and rejected\n\n```php\n$promise = Promise::deferred();\necho '#1 promise is pended ? ', $promise-\u003epended() ? 'yes' : 'no', PHP_EOL;\n$promise-\u003eresolve();\necho '#2 promise is pended ? ', $promise-\u003epended() ? 'yes' : 'no', PHP_EOL;\n```\n\n#### Promise-\u003echained\n\nCheck that promise has more chained promises (connected with ```then```)\n\n```php\n$promise = Promise::deferred();\necho '#1 promise is chained ? ', $promise-\u003echained() ? 'yes' : 'no', PHP_EOL;\n$promise-\u003ethen(function () {\n});\necho '#2 promise is chained ? ', $promise-\u003echained() ? 'yes' : 'no', PHP_EOL;\n```\n\n#### Promise-\u003esync\n\nMake promise synced with other promise (resolves and rejects)\n\n```php\n$next = Promise::deferred();\n$next-\u003ethen(function (string $var) {\n    echo 'NEXT promise been resolved with ', $var, PHP_EOL;\n}, function (string $var) {\n    echo 'NEXT promise been rejected with ', $var, PHP_EOL;\n});\n$promise = Promise::deferred()-\u003esync($next);\n$promise-\u003ethen(function (string $var) {\n    echo 'CURRENT promise been resolved with ', $var, PHP_EOL;\n}, function (string $var) {\n    echo 'CURRENT promise been rejected with ', $var, PHP_EOL;\n});\n$promise-\u003eresolve('hello');\n// or $promise-\u003ereject('world');\n```\n\n#### Promise-\u003efusion\n\nSet promise to throws exception if rejected with an error, otherwise exception will only as promise's result\n\n```php\nPromise::deferred()-\u003efusion()-\u003ethrow(new Exception('test'));\n```\n\n#### Promise-\u003ethen\n\n```php\n$promise = Promise::deferred();\n$promise-\u003ethen(function (...$args) {\n    echo 'promise resolved with args ', var_export($args, true), PHP_EOL;\n}, function (...$args) {\n    echo 'promise rejected with args ', var_export($args, true), PHP_EOL;\n});\n$promise-\u003eresolve('hello', 'world');\n// or $promise-\u003ereject('hello', 'world');\n```\n\n#### Promise-\u003ecatch\n\nAlias of Promise-\u003ethen(null, onRejects)\n\n#### Promise-\u003eresolve\n\nResolves a promise\n\n```php\nPromise::deferred()-\u003eresolve('var1', 'var2');\n```\n\n#### Promise-\u003ereject\n\nRejects a promise\n\n```php\nPromise::deferred()-\u003ereject('var1', 'var2');\n```\n\n#### Promise-\u003ethrow\n\nAlias of Promise-\u003ereject(exception)\n\n# Benchmark\n\n```bash\nphp benchmark.php\n```\n\noutput\n\n```text\ncost 362 ms | op 1.105 μs\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarno-php%2Fpromise","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcarno-php%2Fpromise","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarno-php%2Fpromise/lists"}