国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

開啟事務后報錯無法捕獲異常

fyang

問題描述

開啟了DB事務操作,然后在try里調用了方法,調用的方法報錯了,拋出 RuntimeException 異常

程序代碼

$result = false;
DB::beginTransaction();
        try {
            $validate = new \app\validate\BookApplyValidate();
            if (!$validate->scene('pass')->check($params)) {
                throw new ParamsException((string) $validate->getError());
            }

            $FriendService = new FriendService();
            $applyInfo = $FriendService->findApply(['id' => $params['apply_id']]);//就這個報錯了,拋出 RuntimeException 異常

        } catch (ParamsException $e){
            DB::rollBack();
            return Response::buildFailed($e->getCode(),$e->getMessage());
        } catch (OperateException $e){
            DB::rollBack();
            return Response::buildFailed($e->getCode(),$e->getMessage());
        } catch (QueryException $e) {
            DB::rollBack();
            return Response::buildFailed(ReturnCode::DB_ERROR,'數(shù)據(jù)操作異常,請聯(lián)系管理員',['msg'=>$e->getMessage()]);
        } catch (\Exception $e) {
            DB::rollBack();//上面沒有捕獲的話,應該會被這個異?;惒东@呀
            return Response::buildFailed(ReturnCode::EXCEPTION, '網(wǎng)絡異常,請檢查網(wǎng)絡');
        }

        if ($result){
            DB::commit();
            return Response::buildSuccess([], '操作成功');
        }else{
            DB::rollBack();
            return Response::buildFailed(ReturnCode::INVALID, '操作失敗,請稍后再試');
        }

報錯信息

RuntimeException: Uncommitted transactions found in P:\wwwroot\self_wwwroot\webman\project\backend\vendor\webman\log\src\Middleware.php:120
Stack trace:
#0 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\webman-framework\src\App.php(309): Webman\Log\Middleware->process()
#1 P:\wwwroot\self_wwwroot\webman\project\backend\app\middleware\Cors.php(20): Webman\App::Webman\{closure}()
#2 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\webman-framework\src\App.php(309): App\middleware\Cors->process()
#3 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\webman-framework\src\App.php(531): Webman\App::Webman\{closure}()
#4 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\webman-framework\src\App.php(128): Webman\App::findRoute()
#5 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\workerman\Connection\TcpConnection.php(638): Webman\App->onMessage()
#6 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\workerman\Events\Select.php(311): Workerman\Connection\TcpConnection->baseRead()
#7 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\workerman\Worker.php(2467): Workerman\Events\Select->loop()
#8 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\workerman\Worker.php(1453): Workerman\Worker->run()
#9 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\workerman\Worker.php(1396): Workerman\Worker::forkWorkersForWindows()
#10 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\workerman\Worker.php(560): Workerman\Worker::forkWorkers()
#11 P:\wwwroot\self_wwwroot\webman\project\backend\vendor\workerman\webman-framework\src\support\App.php(124): Workerman\Worker::runAll()
#12 P:\wwwroot\self_wwwroot\webman\project\backend\start.php(4): support\App::run()
#13 {main}
1888 2 0
2個回答

powerbowen

這樣試試?


        try {
            //code
        } catch (ParamsException $e){
            DB::rollBack();
            return Response::buildFailed($e->getCode(),$e->getMessage());
        } catch (OperateException $e){
            DB::rollBack();
            return Response::buildFailed($e->getCode(),$e->getMessage());
        } catch (QueryException $e) {
            DB::rollBack();
            return Response::buildFailed(ReturnCode::DB_ERROR,'數(shù)據(jù)操作異常,請聯(lián)系管理員',['msg'=>$e->getMessage()]);
        } catch (\RuntimeException $e) {
             DB::rollBack();
            return Response::buildFailed(ReturnCode::DB_ERROR,'數(shù)據(jù)操作異常,請聯(lián)系管理員',['msg'=>$e->getMessage()]);
        }  catch (\PDOException | \Exception | \Error $e) {
             DB::rollBack();
            return Response::buildFailed(ReturnCode::DB_ERROR,'數(shù)據(jù)操作異常,請聯(lián)系管理員',['msg'=>$e->getMessage()]);
        } catch (\Throwable $e) {
            DB::rollBack();
            return Response::buildFailed(ReturnCode::EXCEPTION, '網(wǎng)絡異常,請檢查網(wǎng)絡');
        }
  • fyang 2022-11-14

    我加多了個 Error 分支,才可以捕獲

  • powerbowen 2022-11-14

    你的索引異常未必能捕獲到,增加相應的 PDOException,RuntimeException先,因為是自己的搞的,然后 \Exception | \Error 這個兜底錯誤和其它基本異常,Throwable 這個做最終兜底

  • fyang 2022-11-14

    好吧,確實需要兜底的

  • powerbowen 2022-11-14

    http://www.wtbis.cn/doc/webman/exception.html
    這里有個統(tǒng)一的異常處理捕獲,可以做最終兜底,你可以看一看配一配

  • fyang 2022-11-14

    好的,謝謝

keytehu

兜底得用 catch (\Throwable $e) ,catch (\Exception $e) 捕獲不了Error錯誤

  • fyang 2022-11-14

    我想了下,如果所有代碼都未能捕獲這個異常,那這個肯定是代碼錯誤了,每個分支去寫 Throwable 也沒有意義了,干脆直接配置每個模塊異常處理類去做統(tǒng)一的500處理

年代過于久遠,無法發(fā)表回答
??