Используйте Guzzle 6 Concurrent Call и отслеживайте дополнительные параметры

Поэтому я использую Guzzle 6 для выполнения неопределенных одновременных вызовов API, но одна из вещей, которые я хочу сделать, это отслеживать, какое значение массива обрабатывает обещание в настоящее время, так как я первоначально обрабатываю вызовы API на основе результата запроса базы данных. И после этого я хочу обновить значение обратно в базу данных с тем, что я получаю от API.

use GuzzleHttp\Pool;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;

$client = new Client();

$requests = function () {
$uri = 'http://127.0.0.1:8126/guzzle-server/perf';
foreach($database_result as $res) {

/*the res array contains
['id' => 'db id', 'query' => 'get query array'];
*/

$url = $uri . '?' . http_build_query($res['query']);

yield new Request('GET', $url);
}
};

$pool = new Pool($client, $requests(), [
'concurrency' => 5,
'fulfilled' => function ($response, $index) {
/**
* HERE i want to be able to somehow
* retrieve the current responses db id
* this way I can obviously update anything
* i want on the db side
*/
},
'rejected' => function ($reason, $index) {
/**
* HERE i want to be able to somehow
* retrieve the current responses db id
* this way I can obviously update anything
* i want on the db side
*/
},
]);

// Initiate the transfers and create a promise
$promise = $pool->promise();

// Force the pool of requests to complete.
$promise->wait();
...

Любая помощь с этим была бы удивительной. Я хочу получить совет о том, как лучше всего подойти к этой ситуации. Я бы предпочел сделать это разумно, логично.

Спасибо за помощь

2

Решение

Так что я понял это.

В принципе

    $requests = function () {
$uri = 'http://127.0.0.1:8126/guzzle-server/perf';
foreach($database_result as $key => $res) {

/*the res array was updated to be
['id' => 'get query array'];
*/

$url = $uri . '?' . http_build_query($res);

//here is the key difference in change
yield $key => new Request('GET', $url);
}
};

Теперь позже индекс в функциональности пула будет содержать нужный вам индекс.

Надеюсь это поможет.

Ссылка: https://github.com/guzzle/guzzle/pull/1203

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]