기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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()
의 오류 코드를 사용할 수 있도록 할 수 있습니다. 이 프로세스를 반복하여 호출 스택 아래쪽으로 오류 코드를 계속 보낼 수 있습니다.