連続する処理をシーケンス的に記述するのに便利なコマンドですが、読み込み処理などをする場合には「ファイルが存在しなかった場合」などのエラー処理が必要になってきます。
そこで今回はコマンドのエラー処理方法についてご紹介します。
使用するコマンドは LoadURL コマンドで、読み込み先のデータが存在しなかった場合という条件とします。
addCommand(
// 直列処理を実行します。
new SerialList( null,
// トレース文を出力します。
new Trace( "読み込みを開始します" ),
// 存在しない URL を読み込みます。
new LoadURL( new URLRequest( "notexist.dat" ) )
// LoadURL コマンドでエラーが発生した場合に呼び出す関数を指定します。
.error( function( e:Error):void {
// エラー関数内の this は問題が発生した LoadURL コマンドを指します。
trace( this, e );
// ここでは問題を解決しないので、親の SerialList コマンドのエラー関数に伝播します。
} ),
// トレース文を出力します。
new Trace( "読み込みに失敗しました。" )
)
// SerialList コマンドでエラーが発生した場合に呼び出す関数を指定します。
.error( function( e:Error):void {
// エラー関数内の this は問題が発生した LoadURL コマンドを指します。
trace( this, e );
// エラー関数内の処理で問題が解決した場合には、対象の executeComplete() メソッドを実行します。
this.executeComplete();
} )
);
このような感じに問題が発生しそうなコマンドの error() でエラー発生時に呼び出す関数を指定します。
もし SerialList コマンドなどで多階層化されている場合に、エラー発生元で問題が解決すると親のコマンドに伝播していきます。
この場合、伝播先のコマンドでエラー処理が行われる場合、this は常にエラーが発生したコマンドとなります。
最終的にエラー関数内で問題が解決できた場合には、対象の executeComplete() メソッドを実行し、解決できなかった場合にはルートとなっているコマンドリストが CommandEvent.COMMAND_ERROR を送出します。
エラー対策が必要な場合に、ぜひお試しください。