0

我有一个大函数,它调用了许多其他向 BlackBoard 发出 API 请求的函数,我的问题是,在这个主函数中,我创建了我的用户并将他签到当前课程,但实际上我们遇到了这种情况:同一用户已在 BlackBoard 中注册,因此我针对该特定情况创建了更新功能。但是那个 main 函数都在一个 try catch 块中,所以每次我调用该方法时:

$userSalvo = $bd->createUser($user)

并且用户已经存在于 BlackBoard 数据库中,他立即停止我的函数并调用 catch 块,显然得到异常,但我需要如果该用户已经存在,他从这个请求中恢复并转到下一个方法:

$userSalvo = $bd->updateUser($user, $userId);

我已经尝试将其放在 if 语句中,但它不能正常工作:

                    if($userSalvo = $bd->createUser($user))
                    {
                        dd('create');
                        $user->id = $userSalvo['id'];
                    }else
                    {
                        dd('update');
                        $userSalvo = $bd->updateUser($user, $userId);
                        $user->id = $userSalvo['id'];
                    }

任何人都知道我该怎么做?

这是我调用来更新/创建的 API 方法:

     public function updateUser($user, $userId)
    {
        $user->dataSourceId = $this->dataSourceId;
        return $this->bd->patch("/users/{$userId}", json_decode(json_encode($user), true));
    }
    
    public function createUser($user)
    {
        $user->dataSourceId = $this->dataSourceId;
        return $this->bd->post("/users", json_decode(json_encode($user), true));
    }
4

1 回答 1

1

如果您不想重构代码,则应该使用 try-catch 块。它的声音发生的事情是您的 if 条件在调用“createUser”时死亡。

而是尝试这个来替换你的整个 if 语句。

try{
    $userSalvo = $bd->createUser($user)
}catch(Exception $e){
    $userSalvo = $bd->updateUser($user, $userId);
}

这是假设 $user 和 $userId 已定义。

于 2021-08-06T23:26:02.433 回答