L8-HTTP并发请求-混乱的构建动态关闭



我正在测试;并发请求";功能:

  • https://laravel.com/docs/8.x/http-client#concurrent-请求

但我对如何动态创建闭包输入值感到困惑。

例如,我有一个数组:

$a = [
'foo' => 'http//localhost/1',
'bar' => 'http//localhost/2'
];

我需要动态地创建这样的东西:

use IlluminateHttpClientPool;
use IlluminateSupportFacadesHttp;
$responses = Http::pool(fn (Pool $pool) => [
$pool->as('foo')->get('http://localhost/1'),
$pool->as('bar')->get('http://localhost/2'),
]);
return $responses['foo']->body();

更新$a时,闭包内容应发生变化。我该怎么做?

谢谢

好的,我找到了一个解决方案:

use IlluminateHttpClientPool;
use IlluminateSupportFacadesHttp;
$a = [
'foo' => 'http//localhost/1',
'bar' => 'http//localhost/2'
];
$fn2 = function (IlluminateHttpClientPool $pool) use ($a) {
foreach ($a as $aKey => $aVal) {
$arrayPools[] = $pool->as($aKey)->get($aVal);
}
return $arrayPools;
};
$responses = IlluminateSupportFacadesHttp::pool($fn2);
echo $responses['foo']->body();

您也可以使用->map((

$a = collect($a);
Http::pool(fn(Pool $pool) =>
$a->map(fn($url) =>
$pool->get($url->toArray[1])
));

最新更新