捕获从 Salesforce 中的 Apex 抛出的 LWC 异常

Catch exception in LWC thrown from Apex in Salesforce

我有以下代码从 Apex 抛出异常

@AuraEnabled()
public static void associateAccount(string userId, string accountSAPNumber) {

    if(String.isBlank(userId) || string.isBlank(accountSAPNumber)) {            
        throw new AuraHandledException('Please specify both User Email2 and SAP Number2');
    }

    List<user> users = [SELECT Id, Name,Email FROM User WHERE Email  =: userId AND IsActive = true AND Profile.Name ='OEA Customer'];
    
    if(users == null || users.size() <= 0) {
        NoDataFoundException noUsersFound = new NoDataFoundException();
        noUsersFound.setMessage('No users found with the specified email address: ' + userId);
        throw noUsersFound;
    }

    Id accountRecordTypeId = Schema.SObjectType.Account.getRecordTypeInfosByName().get('OEA Customer Location').getRecordTypeId();
    accountSAPNumber = '%' + accountSAPNumber; 
    List<Account> accounts = [SELECT Id FROM Account WHERE RecordTypeId =:accountRecordTypeId AND SAP_Number__c like :accountSAPNumber];

    if(accounts == null || accounts.size() <= 0) {
        NoDataFoundException noAccountFound = new NoDataFoundException();
        noAccountFound.setMessage('No accounts found with the specified SAP Number: ' + accountSAPNumber);
        throw noAccountFound;
    }
    else if(accounts.size() > 1) {
        SearchException moreThan1Account = new SearchException();
        moreThan1Account.setMessage('More than 1 account found with the specified SAP Number: ' + accountSAPNumber);
        throw moreThan1Account;
    }

    OEA_NewContactFormController.accountMethod(userId, accountSAPNumber);       
}

我无法使用以下方法在我的 LWC 控制器中捕获此异常

continueButtonClicked() {
    associateAccount({
      userId: this.searchKey,
      accountSAPNumber: this.accountNumber,
    })
      .then((result) => {
        try {
          console.log("return from remote call " + result);
          this.modalPopUpToggleFlag = false;
        } catch (error) {
            console.log('some error');
        }
      })
      .error((error) => {
        console.log("some error in code");
        /*if (Array.isArray(error.body)) {
          console.log(
            "error message :" + error.body.map((e) => e.message).join(", ")
          );
        } else if (typeof error.body.message === "string") {*/
        //console.log("error message :" + error);
        //}
      })
      .finally(() => {
        console.log("finally message :");
      });
  }

这总是在控制台上给我一个错误“未捕获(承诺)”以及异常的详细信息。我怎样才能以一种处理的方式捕获这个异常。

正确的语法是 .then().catch().finally(),而你写的是 .then().error().finally()
此外,associateAccount returns void,因此不会收到来自 thenresult。也没有理由将 this.modalPopUpToggleFlag = false; 包装在 try-catch 中,只有当您从未定义 modalPopUpToggleFlag 时才会出现错误。

continueButtonClicked() {
    associateAccount({
        userId: this.searchKey,
        accountSAPNumber: this.accountNumber,
    })
    .then(() => {
        console.log("return from remote call);
        this.modalPopUpToggleFlag = false;
    })
    .catch((error) => {
        console.log("some error in code:", error);
    });
}

Javascript

中关于 Using Promises 的精彩阅读