[小ネタ] コマンドのエラー処理

連続する処理をシーケンス的に記述するのに便利なコマンドですが、読み込み処理などをする場合には「ファイルが存在しなかった場合」などのエラー処理が必要になってきます。
そこで今回はコマンドのエラー処理方法についてご紹介します。

使用するコマンドは 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 を送出します。

エラー対策が必要な場合に、ぜひお試しください。

コメントをどうぞ