我正在玩 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 的人遇到过这个问题吗?
这意味着 defer() 看起来需要协程上下文,但在标准 Laravel 路由中不可用。
如果需要在请求结束时运行某些任务,
尝试使用 register_shutdown_function 因为该函数在协程之外工作:
Route::get('testing', function () {
register_shutdown_function(function() {
Log::info('sleeping');
});
return 'Rtoufasdfa';
});