Resultdan penanganan kesalahan - AWS SimSpace Weaver

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Resultdan penanganan kesalahan

Aws::WeaverRuntime::Result<T>Kelas menggunakanOutcome pustaka pihak ketiga. Anda dapat menggunakan pola berikut untuk memeriksaResult dan catch kesalahan yang dikembalikan oleh panggilan 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(); */ } }

Resultpernyataan kontrol makro

Di dalam fungsi dengan tipe kembaliAws::WeaverRuntime::Result<T>, Anda dapat menggunakanWEAVERRUNTIME_TRY makro bukan pola kode sebelumnya. Makro akan menjalankan fungsi yang dilewatkan ke sana. Jika fungsi berlalu gagal, makro akan membuat fungsi melampirkan kembali kesalahan. Jika fungsi berlalu berhasil, eksekusi berlangsung ke baris berikutnya. Contoh berikut menunjukkan penulisan ulang dariDoBeginUpdate() fungsi sebelumnya. Versi ini menggunakanWEAVERRUNTIME_TRY makro bukan strukturif-else kontrol. Perhatikan bahwa jenis kembalinya fungsi iniAws::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(); }

JikaBeginUpdate() gagal, makro membuatDoBeginUpdate() kembali lebih awal dengan kegagalan. Anda dapat menggunakanWEAVERRUNTIME_EXPECT_ERROR makro untuk mendapatkanAws::WeaverRuntime::ErrorCode dariBeginUpdate(). Contoh berikut menunjukkan bagaimanaUpdate() fungsi panggilanDoBeginUpdate() dan mendapatkan kode kesalahan pada kegagalan.

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

Anda dapat membuat kode kesalahan dariBeginUpdate() tersedia untuk fungsi yang panggilanUpdate() dengan mengubah jenis kembaliUpdate() keAws::WeaverRuntime::Result<void>. Anda dapat mengulangi proses ini untuk terus mengirim kode kesalahan lebih jauh ke bawah tumpukan panggilan.