Result 및 오류 처리 - AWS SimSpace Weaver

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Result 및 오류 처리

Aws::WeaverRuntime::Result<T> 클래스는 타사 Outcome 라이브러리를 사용합니다. 다음 패턴을 사용하여 Result를 확인하고 API 호출에서 반환된 오류를 캐치할 수 있습니다.

void DoBeginUpdate(Application& app) { Result<Transaction> transactionResult = Api::BeginUpdate(app); if (transactionResult) { Transaction transaction = std::move(transactionResult).assume_value(); /** * Do things with transaction ... */ } else { ErrorCode errorCode = WEAVERRUNTIME_EXPECT_ERROR(transactionResult); /** * Macro compiles to: * ErrorCode errorCode = transactionResult.assume_error(); */ } }

Result 제어문 매크로

Aws::WeaverRuntime::Result<T> 반환 유형이 있는 함수 내에서 이전 코드 패턴 대신 WEAVERRUNTIME_TRY 매크로를 사용할 수 있습니다. 매크로는 전달된 함수를 실행합니다. 전달된 함수가 실패하면 매크로는 둘러싸는 함수가 오류를 반환하도록 합니다. 전달된 함수가 성공하면 실행은 다음 줄로 진행됩니다. 다음 예제에서는 이전 DoBeginUpdate() 함수의 재작성을 보여줍니다. 이 버전에서는 if-else 제어 구조 대신 WEAVERRUNTIME_TRY 매크로를 사용합니다. 함수의 반환 형식은 Aws::WeaverRuntime::Result<void>입니다.

Aws::WeaverRuntime::Result<void> DoBeginUpdate(Application& app) { /** * Execute Api::BeginUpdate() * and return from DoBeginUpdate() if BeginUpdate() fails. * The error is available as part of the Result. */ WEAVERRUNTIME_TRY(Transaction transaction, Api::BeginUpdate(m_app)); /** * Api::BeginUpdate executed successfully. * * Do things here. */ return Aws::Success(); }

BeginUpdate()가 실패하면 매크로는 실패와 DoBeginUpdate()를 조기에 반환합니다. WEAVERRUNTIME_EXPECT_ERROR 매크로를 사용하여 BeginUpdate()에서 Aws::WeaverRuntime::ErrorCode를 가져올 수 있습니다. 다음 예제는 Update() 함수의 DoBeginUpdate() 호출 및 실패 시 오류 코드를 가져오는 방법을 보여줍니다.

void Update(Application& app) { Result<void> doBeginUpdateResult = DoBeginUpdate(app); if (doBeginUpdateResult) { /** * Successful. */ } else { /** * Get the error from Api::BeginUpdate(). */ ErrorCode errorCode = WEAVERRUNTIME_EXPECT_ERROR(doBeginUpdateResult); } }

Update()의 반환 유형을 Aws::WeaverRuntime::Result<void>로 변경하여 Update()를 호출하는 함수에서 BeginUpdate()의 오류 코드를 사용할 수 있도록 할 수 있습니다. 이 프로세스를 반복하여 호출 스택 아래쪽으로 오류 코드를 계속 보낼 수 있습니다.