翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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>
に変更することで、BeginUpdate()
からのエラーコードを Update()
を呼び出す関数に利用できるようにすることができます。この手順を繰り返して、エラーコードを呼び出しスタックのさらに下位に送り続けることができます。