Для написания асинхронного запроса к API поставщика на фреймворке Yii2 можно воспользоваться классом GuzzleHttp\Client, который предоставляет возможность отправлять HTTP запросы асинхронно.
Пример асинхронного запроса к API:
```php
use GuzzleHttp\Client;
use GuzzleHttp\Promise;
$client = new Client();
$promises = [];
for ($i = 0; $i < 4; $i++) { // Разбиваем запрос на 4 части по 50 позиций (200 / 4 = 50)
$promises[] = $client->getAsync('https://api.example.com/products?offset=' . $i*50 . '&limit=50');
}
$results = Promise\unwrap($promises);
foreach ($results as $response) {
$data = json_decode($response->getBody(), true);
// Обновляем данные товаров
}
```
Чтобы обновлять данные по мере поступления ответов от API, можно воспользоваться функцией then из библиотеки GuzzleHttp\Promise:
```php
$promises = [];
for ($i = 0; $i < 4; $i++) {
$promises[] = $client->getAsync('https://api.example.com/products?offset=' . $i*50 . '&limit=50');
}
Promise\each_limit($promises, function($response, $index) {
$data = json_decode($response->getBody(), true);
// Обновляем данные товаров
}, 1); // Ограничиваем количество одновременных запросов
Promise\all($promises)->wait();
```
Таким образом, с помощью асинхронных запросов и управлением потоком выполнения запросов с помощью GuzzleHttp\Promise можно эффективно обновлять данные по мере получения ответов от API, не дожидаясь завершения всех запросов.