This package provides Promise/A+ PHP implementation.
Console run:
composer require streamcommon/promise
Or add into your composer.json
:
"require": {
"streamcommon/promise": "*"
}
Promise is a library which provides Promise/A+ PHP implementation.
All Promise it a special PHP classes that contains its state:
pending
- PromiseInterface::STATE_PENDINGfulfilled
- PromiseInterface::STATE_FULFILLEDrejected
- PromiseInterface::STATE_REJECTED
To initiate a new promise, you can use static method PromiseInterface::create
or create with new.
All resulting Promise
has PromiseInterface::STATE_PENDING
state.
$promise = new Promise(function(callable $resolve, callable $reject));
// OR
$promise = Promise::create(function(callable $resolve, callable $reject))
When function($resolve, $reject)
executor finishes the job, it should call one of the functions:
$resolve
to indicate that the job finished successfully and setPromise
state toPromiseInterface::STATE_FULFILLED
$resolve = function ($value) {
$this->setState(PromiseInterface::STATE_FULFILLED);
$this->setResult($value);
};
$reject
to indicate that an error occurred and setPromise
state toPromiseInterface::STATE_REJECTED
$reject = function ($value) {
$this->setState(PromiseInterface::STATE_REJECTED);
$this->setResult($value);
};
Method PromiseInterface::then()
it be called after promise change stage. In terms of our analogy: this is the “subscription".
public function then(?callable $onFulfilled = null, ?callable $onRejected = null): PromiseInterface;
$onFulfilled
run when thePromise
is resolved and it hasPromiseInterface::STATE_FULFILLED
state.$onFulfilled
run when thePromise
is rejected and it hasPromiseInterface::STATE_REJECTED
state.
NOTE: If
$onFulfilled
or$onFulfilled
is not a callable function it was ignore
Calling PromiseInterface::resolve()
creates a successfully executed promise with the result value.
public static function resolve($value): PromiseInterface;
It is similar to:
$promise = new Promise(function(callable $resolve) {
$resolve($value)
});
Similarly PromiseInterface::reject()
creates an already executed promise with an error value.
public static function reject($value): PromiseInterface;
It is similar to:
$promise = new Promise(function(callable $resolve, callable $reject) {
$reject($value)
});
Standard Promise
use Streamcommon\Promise\Promise;
$promise = Promise::create(function (callable $resolve) {
$resolve(41);
});
$promise->then(function ($value) {
return $value + 1;
});
$promise->then(function ($value) {
echo $value . PHP_EOL;
});
$promise->wait(); // promise execution
If you want see TRUE promise then install Swoole extension. For more info visit the Swoole repo
NOTE: TRUE promise work only in CLI mode
use Streamcommon\Promise\PromiseA;
// be careful with this
\Swoole\Runtime::enableCoroutine(); // IF YOU WANT REALY ASYNC
$promise = PromiseA::create(function (callable $resolve) {
// the function is executed automatically when the promise is constructed
$resolve(41);
});
$promise->then(function ($value) {
// the function is executed automatically after __constructor job
return $value + 1;
})->then(function ($value) {
// the function is executed automatically after ::then()
echo $value . PHP_EOL;
});