如何从 go 函数协程返回响应

问题描述 投票:0回答:1

我正在使用 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
函数包装它,事件循环已经启动。

php laravel coroutine swoole openswoole
1个回答
0
投票
<?
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);
});
© www.soinside.com 2019 - 2024. All rights reserved.