下面是一个带有ReactPHP承诺的简单事件循环
new React\Http\Server([
function(ServerRequestInterface $request) {
$deferred = new React\Promise\Deferred();
$promise = $deferred->promise();
$deferred->reject(new Response(500));
return $promise;
}
]);在这种情况下,一切正常工作,服务器返回500,因为承诺被返回并被拒绝。
但是如何处理这样的案件:
new React\Http\Server([
function(ServerRequestInterface $request) {
$deferred = new React\Promise\Deferred();
$promise = $deferred->promise();
SynTaxErrO..2!((r();
$deferred->reject(new Response(500));
return $promise;
}
]);服务器/循环仍将运行,但连接将挂起,因为在返回承诺之前发生了语法错误。
我的第一个假设是使用try-catch,但它在PHP中似乎不起作用。
try {
SynTaxErrO..2!((r();
} catch($e) {
$deferred->reject(new Response(500));
return $promise;
}是否有办法处理这样的案件,但仍然退回500,而不是只是挂着等待一个承诺,从来没有回报?在实际代码中,我有一个返回承诺的路由器功能。如果其中一个路由有语法错误,因此连接只挂起,则承诺永远不会被重新调整。也没有错误消息。
发布于 2018-08-22 06:56:25
无法捕获语法错误。如果在catch语句之前有语法错误,那么执行永远不会到达您的catch,因此就像它不存在一样。要检测语法错误,请在执行代码之前使用linter (例如,php -l)。
对于其他类型的错误,如果您使用的是PHP 7,则可以使用
catch (Error $e) { ... }或者set_exception_handler()处理程序来捕获错误。
如果希望同时捕获错误和异常,则可以使用如下所示的块
catch (Throwable $e) { ... }如果只想捕获异常,请使用
catch (Exception $e) { ... }发布于 2018-08-22 06:46:10
嗨,ReactPHP团队成员。看起来你的问题是SynTaxErrO..2!((r();,https://3v4l.org/02cli不能解析:https://3v4l.org/02cli
最好的解决方案是不存在任何语法错误。在提交/部署之前可以用来链接所有文件的包是:https://github.com/JakubOnderka/PHP-Parallel-Lint
https://stackoverflow.com/questions/51960975
复制相似问题