我正在测试;并发请求";功能:
- 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])
));