我正在使用 Laravel Swoole Coroutine
go
函数来执行 HTTP 请求,以获得更好的性能。当我收到外部服务的响应时,会使用来自外部服务的数据在数据库中创建一个新条目。
我希望能够使用新的数据库记录从控制器返回响应。但是,似乎
go
之外的任何内容都无法访问 go
函数中分配的任何内容。我知道这是在单独的线程中发生的,但是有没有办法实现这一点,以便我可以访问 go
函数内的结果?
请注意,我在全局启用了协程,并且我只使用如下所示的函数:
public function store(User $user, Request $request) {
go(function () {
// get data from external API using Laravel HTTP Client
...
$user = User:create($data);
return response($user, 201)->send();
});
}
我尝试过使用
WaitGroup()
,但它抱怨如果我用 Co\run
函数包装它,事件循环已经启动。
<?
co::run(function() {
function a($par) {
$ch = new Chan(1);
go(function() use ($par, $ch) {
$res = $par * 2;
$ch->push($res);
});
$ret = $ch->pop();
return $ret;
}
echo '='.a(3);
});