Batch-Processing of a pool asynchronous commercetools requests.
Commercetools suggests that you use asynchronous requests instead of sequential ones but the PHP SDK makes it not very easy:
- Promises for Client::executeAsync works on the raw guzzle response, not the "requested object".
- Guzzle promise-chaining/forwarding and the AbstractApiResponse from commercetools are not compatible.
So i created a helping pool of async requests. Please review the following information.
composer require bestit/commercetools-async-pool
$pool = new Pool($this->getClient());
$pool->addPromise(ProductTypeByIdGetRequest::ofId('example')).then(
// Success
function(ProductType $productType) use ($userdata) {
echo $productType->getId();
},
// optional error callback
function(ErrorResponse $error) {
echo $error->getStatusCode();
}
);
//.then(/* chained callbacks */)
//.then()
// ....
// Gets flushed automatically, if we overflow the tick rate from the constructor.
$pool->flush();
But beware, do not forget that the callbacks are happening asynchronous! That is no sequential PHP anymore!
- More Unittests