【问题标题】:Get first array from multiples endpoints async request从多个端点异步请求中获取第一个数组
【发布时间】:2021-09-26 15:07:34
【问题描述】:

我配置了当前使用 getAsync 和 4 个 url 承诺的 guzzle。此数据的返回带有 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();

回报暴食承诺

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...

【问题讨论】:

  • 所以你想要一个包含每个请求的数组?
  • 你可以传递第二个变量 $index 并作为键名传递给单独声明的变量

标签: php arrays asynchronous promise guzzle


【解决方案1】:

我没有完全理解你的要求是什么?但我仍然希望这可能会有所帮助。 您可以将第二个参数作为 $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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-27
    • 2015-01-17
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    相关资源
    最近更新 更多