nextHandler = $nextHandler; } public function __invoke(Call $call, array $options) { $metadataReceiver = new Promise(); $options['metadataCallback'] = function ($metadata) use ($metadataReceiver) { $metadataReceiver->resolve($metadata); }; $next = $this->nextHandler; return $next($call, $options)->then( function ($response) use ($metadataReceiver) { if ($metadataReceiver->getState() === PromiseInterface::FULFILLED) { return [$response, $metadataReceiver->wait()]; } else { return [$response, []]; } } ); } }