実務シチュエーション4 択難易度 応用

状況

決済処理の PR をレビューしている。作成者のコメントは「決済 API のエラーでアプリが落ちないよう try/catch を追加しました」。差分の中心は次のコード。

最も優先して伝えるべき指摘は?

try {  await chargePayment(order);} catch (e) { console.log(e); }await markAsPaid(order);

正答

  1. console.log ではなく、ロガーライブラリで出力すべきです
  2. 変数名 e は、error のように分かりやすくすべきです
  3. 決済が失敗しても markAsPaid が実行され、未払いが支払済みになります
  4. try/catch より Promise の .catch() で書くほうが簡潔です

解説

catch で例外をログに出すだけで処理を続けているため、決済が失敗しても次の markAsPaid が実行され、代金を受け取っていない注文が支払済みになる。お金とデータの整合に関わる重大な不具合である。失敗時は処理を中断するか、失敗状態として記録する必要がある。ロガーの使用や変数名、.catch() での書き方は、もっともらしいが好みや改善の範囲で、この不具合を直さない。

reviewerror-handling

この問題を含む 実務シチュエーション のテストを制限時間つきで解く

実務シチュエーションクイズへ