As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Resulte Tratamento de erros
AAws::WeaverRuntime::Result<T>
classe usa umaOutcome
biblioteca de terceiros. Você pode usar o padrão a seguir para verificarResult
e catch os erros retornados pelas chamadas de 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(); */ } }
Resultmacro de declaração de controle
Dentro de uma função com um tipo de retornoAws::WeaverRuntime::Result<T>
, você pode usar aWEAVERRUNTIME_TRY
macro em vez do padrão de código anterior. A macro executará a função passada para ela. Se a função passada falhar, a macro fará com que a função delimitadora retorne um erro. Se a função passada for bem-sucedida, a execução prosseguirá para a próxima linha. O exemplo a seguir mostra uma reescrita daDoBeginUpdate()
função anterior. Essa versão usa aWEAVERRUNTIME_TRY
macro em vez da estruturaif-else de controle. Observe que o tipo de retorno da função é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(); }
SeBeginUpdate()
falhar, a macroDoBeginUpdate()
retornará mais cedo com uma falha. Você pode usar aWEAVERRUNTIME_EXPECT_ERROR
macro para obter oAws::WeaverRuntime::ErrorCode
deBeginUpdate()
. O exemplo a seguir mostra como aUpdate()
função chamaDoBeginUpdate()
e obtém o código de erro em caso de falha.
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); } }
Você pode tornar o código de erroBeginUpdate()
disponível para uma função que chamaUpdate()
alterando o tipo de retorno deUpdate()
paraAws::WeaverRuntime::Result<void>
. Você pode repetir esse processo para continuar enviando o código de erro mais abaixo na pilha de chamadas.