首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在承诺返回之前在承诺中出现语法错误

问在承诺返回之前在承诺中出现语法错误
EN

Stack Overflow用户
提问于 2018-08-22 06:31:51
回答 2查看 482关注 0票数 0

下面是一个带有ReactPHP承诺的简单事件循环

代码语言:javascript
复制
new React\Http\Server([
    function(ServerRequestInterface $request) {
        $deferred = new React\Promise\Deferred();
        $promise = $deferred->promise();

        $deferred->reject(new Response(500));

        return $promise;
    }
]);

在这种情况下,一切正常工作,服务器返回500,因为承诺被返回并被拒绝。

但是如何处理这样的案件:

代码语言:javascript
复制
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中似乎不起作用。

代码语言:javascript
复制
try {
    SynTaxErrO..2!((r();
} catch($e) {
    $deferred->reject(new Response(500));
    return $promise;
}

是否有办法处理这样的案件,但仍然退回500,而不是只是挂着等待一个承诺,从来没有回报?在实际代码中,我有一个返回承诺的路由器功能。如果其中一个路由有语法错误,因此连接只挂起,则承诺永远不会被重新调整。也没有错误消息。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-22 06:56:25

无法捕获语法错误。如果在catch语句之前有语法错误,那么执行永远不会到达您的catch,因此就像它不存在一样。要检测语法错误,请在执行代码之前使用linter (例如,php -l)。

对于其他类型的错误,如果您使用的是PHP 7,则可以使用

代码语言:javascript
复制
catch (Error $e) { ... }

或者set_exception_handler()处理程序来捕获错误。

如果希望同时捕获错误和异常,则可以使用如下所示的块

代码语言:javascript
复制
catch (Throwable $e) { ... }

如果只想捕获异常,请使用

代码语言:javascript
复制
catch (Exception $e) { ... }

有关更多信息,请参见http://php.net/manual/en/language.errors.php7.php

票数 1
EN

Stack Overflow用户

发布于 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51960975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档