laravel 中的路由中使用 defer 时,返回 php fatal 错误

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

我正在玩 laravel 的 defer 。我有这个:

Route::get('testing', function () {
    defer(function(){
        //          sleep(3);
        Log::info('sleeping');
    })
        ->always(); // Will always run defer once executed

    return 'Rtoufasdfa';
});

我在我的航海码头得到这个。

PHP Fatal error:  Uncaught Swoole\Error: API must be called in the coroutine in /var/www/html/routes/web.php:94
  Stack trace:
2024-11-08 23:15:05,688 INFO reaped unknown pid 1093 (exit status 255)
 2024-11-08 23:15:05,688 INFO reaped unknown pid 1094 (exit status 255)
 #0 /var/www/html/routes/web.php(94): defer()

有熟悉 defer 的人遇到过这个问题吗?

php laravel laravel-8
1个回答
0
投票

这意味着 defer() 看起来需要协程上下文,但在标准 Laravel 路由中不可用。

如果需要在请求结束时运行某些任务,

尝试使用 register_shutdown_function 因为该函数在协程之外工作:

Route::get('testing', function () {
    register_shutdown_function(function() {
        Log::info('sleeping');
    });

    return 'Rtoufasdfa'; 
});
© www.soinside.com 2019 - 2024. All rights reserved.