Result y control de errores - AWS SimSpace Weaver

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Result y control de errores

La clase de Aws::WeaverRuntime::Result<T> usa una biblioteca Outcome de terceros. Puede usar el siguiente patrón para comprobar Result y atrapar los errores devueltos por las llamadas a la 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(); */ } }

Macro de instrucciones de control de Result

Dentro de una función con un tipo de retorno Aws::WeaverRuntime::Result<T>, puede utilizar la macro WEAVERRUNTIME_TRY en lugar del patrón de código anterior. La macro ejecutará la función que se le haya transferido. Si la función pasada falla, la macro hará que la función adjunta devuelva un error. Si la función pasada se ejecuta correctamente, la ejecución pasa a la siguiente línea. El siguiente ejemplo muestra una reescritura de la función de DoBeginUpdate() anterior. Esta versión utiliza la macro WEAVERRUNTIME_TRY en lugar de la estructura de control if-else. Tenga en cuenta que el tipo de retorno de la función es 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(); }

Si BeginUpdate() falla, la macro DoBeginUpdate() vuelve antes de tiempo y se produce un error. Puede utilizar la macro WEAVERRUNTIME_EXPECT_ERROR para obtener el Aws::WeaverRuntime::ErrorCode de BeginUpdate(). En el siguiente ejemplo, se muestra cómo la función Update() llama a DoBeginUpdate() y obtiene el código de error en caso de error.

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); } }

Puede hacer que el código de error BeginUpdate() esté disponible para una función que llama a Update() cambiando el tipo de retorno Update() a Aws::WeaverRuntime::Result<void>. Puede repetir este proceso para seguir enviando el código de error más abajo en la pila de llamadas.