从多个端点异步请求获取第一个数组

Get first array from multiples endpoints async request

我配置了 guzzle,它目前使用 getAsync 和 4 个 url promise。该数据的return带有2个数组,格式如下。

我的问题是,如何将第一个变量分成两个变量,第一个只是第一个数组?在此示例中,它将是大小为 3154 的整个数组,而在另一个变量中,它将是大小为 10297

的整个数组

狂欢

$requests = [
            getenv('apiSavingNew'), 
            getenv('apiSavingOld'),
        ];

        $promises = (function () use ($requests) {
        $client = new Client([
            'verify' => false
        ]);

        foreach ($requests as $request) {
            yield $client->getAsync($request);      
        }
        })();

        $eachPromise = new EachPromise($promises, [
            'concurrency' => 2,
            'fulfilled' => function (Response $response) {
            if ($response->getStatusCode() == 200) {
                $request = json_decode($response->getBody());
                    $firstRequest = // first array here
                    $secondRequest = // second array here
                }
            },
            'rejected' => function (RequestException $e) {
                echo $e->getMessage();
            }
        ]);

        $eachPromise->promise()->wait();

Return 大口答应

array (size=3154)
  0 => 
    object(stdClass)[11532]
      public 'id' => string '57a64bb0-1c6a-11ec-bfd3-173b9227de8c' (length=36)
      public 'createdAt' => string '2021-09-23T12:32:40.427Z' (length=24)
      public 'data' => string '2021-09-22T00:00:00.000Z' (length=24)
      public 'dataFim' => string '2021-10-22T00:00:00.000Z' (length=24)
      public 'valor' => string '0.30120' (length=7)
      public 'serieTemporalId' => string 'a43978f1-7fd4-4550-9907-106474e64ee4' (length=36)
      public 'acumuladoAno' => null
      public 'acumulado12Meses' => null
  1 => 
    object(stdClass)[11539]
      public 'id' => string '57a49e00-1c6a-11ec-bfd3-173b9227de8c' (length=36)
      public 'createdAt' => string '2021-09-23T12:32:40.416Z' (length=24)
      public 'data' => string '2021-09-21T00:00:00.000Z' (length=24)
      public 'dataFim' => string '2021-10-21T00:00:00.000Z' (length=24)
      public 'valor' => string '0.30120' (length=7)
      public 'serieTemporalId' => string 'a43978f1-7fd4-4550-9907-106474e64ee4' (length=36)
      public 'acumuladoAno' => null
      public 'acumulado12Meses' => null
   more elements...

array (size=10297)
  0 => 
    object(stdClass)[11545]
      public 'id' => string '54f70a30-1c6a-11ec-bfd3-173b9227de8c' (length=36)
      public 'createdAt' => string '2021-09-23T12:32:35.923Z' (length=24)
      public 'data' => string '2021-09-22T00:00:00.000Z' (length=24)
      public 'dataFim' => string '2021-10-22T00:00:00.000Z' (length=24)
      public 'valor' => string '0.50000' (length=7)
      public 'serieTemporalId' => string 'ec940ca2-7da8-4a75-ae7b-d90244797b65' (length=36)
      public 'acumuladoAno' => null
      public 'acumulado12Meses' => null
  1 => 
    object(stdClass)[11557]
      public 'id' => string '54f3fcf0-1c6a-11ec-bfd3-173b9227de8c' (length=36)
      public 'createdAt' => string '2021-09-23T12:32:35.903Z' (length=24)
      public 'data' => string '2021-09-21T00:00:00.000Z' (length=24)
      public 'dataFim' => string '2021-10-21T00:00:00.000Z' (length=24)
      public 'valor' => string '0.50000' (length=7)
      public 'serieTemporalId' => string 'ec940ca2-7da8-4a75-ae7b-d90244797b65' (length=36)
      public 'acumuladoAno' => null
      public 'acumulado12Meses' => null
   more elements...

我没有完全理解你的要求是什么?但我仍然希望这可能有所帮助。 您可以将第二个参数添加到 function in fulfilled as $index 并将其添加到 $results 空数组的单独变量中。

$results = [];
$requests = [
    getenv('apiSavingNew'), 
    getenv('apiSavingOld'),
];

$promises = (function () use ($requests) {
$client = new Client([
    'verify' => false
]);

foreach ($requests as $request) {
    yield $client->getAsync($request);      
}
})();

$eachPromise = new EachPromise($promises, [
    'concurrency' => 2,
    'fulfilled' => function (Response $response, $index) {
    if ($response->getStatusCode() == 200) {
        //$request = json_decode($response->getBody());
        $results[$index] = json_decode($response->getBody(), true);
        }
    },
    'rejected' => function (RequestException $e, $index) {
        echo $e->getMessage();
    }
]);

$eachPromise->promise()->wait();