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> に変更することで、BeginUpdate() からのエラーコードを Update() を呼び出す関数に利用できるようにすることができます。この手順を繰り返して、エラーコードを呼び出しスタックのさらに下位に送り続けることができます。