Skip to content

Instantly share code, notes, and snippets.

@koyta
Created May 25, 2017 10:52
Show Gist options
  • Save koyta/da423d1aa2a44fabcce5a15c1b9a3ed3 to your computer and use it in GitHub Desktop.
Save koyta/da423d1aa2a44fabcce5a15c1b9a3ed3 to your computer and use it in GitHub Desktop.
Errors

Обработка исключений

Error содержит:

  • .name
  • .message
  • .toString() // name + ': ' + message
  • .stack — string где произошла ошибка (не стандарт)
try
{
	// код
	throw new Error( 'Error message' );
}
catch ( exception )
{
	window.console && console.error && console.error( exeption );
}

Типы ошибок:

  • EvalError
  • RangeError
  • ReferenceError
  • SyntaxError
  • TypeError
  • URIError

throw expression;
— выбов ошибки со значением expression.

Можно передавать любое значение, но лучше всегда передавать только объект типа Error:

throw true;
throw 42;
throw 'Error!!!';
throw new Error();

Собственный тип ошибок

function MyError( message )
{
	this.name = 'MyError';
	this.message = message || 'Default message';
}
MyError.prototype = new Error();
MyError.prototype.constructor = MyError;

try
{
	// ...
	throw new MyError();
	// ...
}
catch ( exception )
{
	if ( exception instanceof MyError )
	{
		// Обрабатываем
	}
	else
	{
		throw exception; // Пропускаем дальше
	}
}

finally
— выполняется всегда, независимо от возникновения ошибки и исхода её обработки.

Последовательность

function test( x )
{
	console.log( 1 );
	
	try
	{
		console.log( 2 );
		x();
		console.log( 3 );
	}
	catch ( exception )
	{
		console.log( 4 );
		console.log( exception.toString() );
		return; // попробовать, убрав
		console.log( 5 );
	}
	finally
	{
		console.log( 6 );
	}
	
	console.log( 7 );
}
test( null );
// 1,2,4,6
// 1,2,4,5,6,7 без return
test( function(){} );
// 1,2,3,6,7

Если добавить return после 1: 1
Если добавить return после 2: 1,2,6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment