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 menggunakan Outcome perpustakaan pihak ketiga. Anda dapat menggunakan pola berikut untuk memeriksa kesalahan Result dan catch 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 pengembalianAws::WeaverRuntime::Result<T>, Anda dapat menggunakan WEAVERRUNTIME_TRY makro alih-alih pola kode sebelumnya. Makro akan menjalankan fungsi yang diteruskan ke sana. Jika fungsi yang dilewatkan gagal, makro akan membuat fungsi terlampir mengembalikan kesalahan. Jika fungsi yang dilewatkan berhasil, eksekusi berlanjut ke baris berikutnya. Contoh berikut menunjukkan penulisan ulang dari DoBeginUpdate() fungsi sebelumnya. Versi ini menggunakan WEAVERRUNTIME_TRY makro bukan struktur if-else kontrol. Perhatikan bahwa tipe pengembalian fungsi adalahAws::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(); }

Jika BeginUpdate() gagal, makro membuat DoBeginUpdate() pengembalian lebih awal dengan kegagalan. Anda dapat menggunakan WEAVERRUNTIME_EXPECT_ERROR makro untuk mendapatkan Aws::WeaverRuntime::ErrorCode dariBeginUpdate(). Contoh berikut menunjukkan bagaimana Update() fungsi memanggil DoBeginUpdate() 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 dari BeginUpdate() tersedia ke fungsi yang memanggil Update() dengan mengubah jenis pengembalian Update() keAws::WeaverRuntime::Result<void>. Anda dapat mengulangi proses ini untuk terus mengirim kode kesalahan lebih jauh ke tumpukan panggilan.