Error handling in JavaScript

Post on 27-Jan-2015

134 views 0 download

Tags:

description

My Talk at

Transcript of Error handling in JavaScript

Handle with careFehlerbehandlung in JavaScript

Friday 8 November 13

WER BIN ICH?

• Sebastian Springer

• https://github.com/sspringer82

• @basti_springer

Friday 8 November 13

Friday 8 November 13

Was ist ein Fehler?

☠Friday 8 November 13

Was ist ein Fehler?

☠Whoops, this should not happen.

Friday 8 November 13

Fehlertypen

Friday 8 November 13

Fehlertypen

Friday 8 November 13

Fehlertypen

Friday 8 November 13

Fehlertypen

Friday 8 November 13

Fehlertypen

Friday 8 November 13

Fehlertypen

Friday 8 November 13

Eigene Fehler

throw new Error('An error occurred');

Friday 8 November 13

Eigene Fehler

var MyErr = function (message) { this.message = message; this.name = 'MyErr';}

MyErr.prototype = new Error();MyErr.prototype.constructor = MyErr;

Friday 8 November 13

Friday 8 November 13

Abfangen von Fehlern

try { throw new Error('Hello World');} catch (e) { console.log(e);} finally { console.log('Finished');}

Friday 8 November 13

Abfangen von Fehlern

try {

} catch (RangeError e) { }

Friday 8 November 13

Abfangen von Fehlern

try {

} catch (RangeError e) { }

Friday 8 November 13

Abfangen von Fehlern

try {

} catch (e) { if (e instanceof RangeError) { }}

Friday 8 November 13

Callbacks

Friday 8 November 13

Fehler in CallbacksApplikation Asynchrone

Ausführung

Friday 8 November 13

Fehler in CallbacksApplikation Asynchrone

Ausführung

Friday 8 November 13

Fehler in CallbacksApplikation Asynchrone

Ausführung

Operation

Friday 8 November 13

Fehler in CallbacksApplikation Asynchrone

Ausführung

Operation

Friday 8 November 13

Fehler in CallbacksApplikation Asynchrone

Ausführung

Operation

☠☂ ☏☣☢

Friday 8 November 13

Fehler in CallbacksApplikation Asynchrone

Ausführung

Operation

Callback☠☂ ☏☣☢

Friday 8 November 13

Fehler in CallbacksApplikation Asynchrone

Ausführung

Operation

Callback☠☂ ☏☣☢

Friday 8 November 13

Fehler in Callbacksfunction myTimeout() { throw new Error("whoops");}

Friday 8 November 13

Fehler in Callbacksfunction myTimeout() { throw new Error("whoops");}

try { setTimeout("myTimeout()", 0);} catch (e) { console.log(e);}

Friday 8 November 13

Fehler in Callbacksfunction myTimeout() { throw new Error("whoops");}

try { setTimeout("myTimeout()", 0);} catch (e) { console.log(e);}

☠Friday 8 November 13

Friday 8 November 13

Fehler in Callbacks$.ajax({ url: ‘/something’, success: function (data) { ... }, error: function (data) { ... }});

Friday 8 November 13

Friday 8 November 13

Fehler in Callbacks

var fs = require('fs');

fs.readFile('file', function (err, d) { ...});

Friday 8 November 13

Fehler in Callbacks

var fs = require('fs');

fs.readFile('file', function (err, d) { ...});

null

Friday 8 November 13

Fehler in Callbacks

Error { errno: ... code: ... path: ... message: ...}

Friday 8 November 13

Events

Friday 8 November 13

Error EventsSubject Observer

Friday 8 November 13

Error EventsSubject Observer

Friday 8 November 13

Error EventsSubject Observer

Friday 8 November 13

Error Events

on(‘error’, function...

Subject Observer

Friday 8 November 13

Error Events

☠☂ ☏☣☢

on(‘error’, function...

Subject Observer

Friday 8 November 13

Error Events

☠☂ ☏☣☢

on(‘error’, function...

trigger(‘error’, {...

Subject Observer

Friday 8 November 13

Error Events

☠☂ ☏☣☢

on(‘error’, function...

trigger(‘error’, {...

Subject Observer

Friday 8 November 13

Promiseshttp://wiki.commonjs.org/wiki/Promises

Friday 8 November 13

Promises

In Javascript, promises are objects which represent the pending result of an asynchronous operation.

(Martin Fowler)

Friday 8 November 13

Promises$.ajax({ url: ‘/my/url’}).done(function (data) { ...}).fail(function (data) { ...}).always(function (data) { ...});

Friday 8 November 13

Promisesfunction promisedFunc() { var def = $.Deferred(); // do something asynchronous // success def.resolve(); // fail def.reject(); return def.promise();}

Friday 8 November 13

Promises

promisedFunc().done(function () { // success}).fail(function () { // failure}).always(function () { // success & failure});

Friday 8 November 13

Promises

$.when( promisedFunc(), promisedFunc()).then(success, failure);

Friday 8 November 13

Promises

• http://api.jquery.com/category/deferred-object/Client only

• https://github.com/kriskowal/qClient + Server

• https://github.com/kriszyp/node-promiseServer only

Friday 8 November 13

Node.js Domain

Friday 8 November 13

Node domain

var domain = require(‘domain’).create();domain.on(‘error’, function (err) { console.log(err);});

domain.run(function () { ...});

Friday 8 November 13

Node Domain

• error-Events

• Exceptions

Wird ausgeführt bei:

Friday 8 November 13

window.onerror

Friday 8 November 13

window.onerror

catch it all!

Friday 8 November 13

window.onerror

window.onerror = function (msg, url, nr){ ... return true;}

Friday 8 November 13

window.onerror

window.onerror

Code

Friday 8 November 13

und jetzt?

Friday 8 November 13

und jetzt?

Logging FTW!

Friday 8 November 13

Logging

Client Server

Friday 8 November 13

Logging

Client

☠☂ ☏☣☢

Server

Friday 8 November 13

Logging

Client

☠☂ ☏☣☢

ServerLog Message

Friday 8 November 13

Logging

Client

☠☂ ☏☣☢

ServerLog Message

Friday 8 November 13

Loggingwindow.onerror = function (msg, url, nr){ $.ajax({ url: ‘/logger’ data: { msg: msg, url: url, nr: nr } }); return true;}Friday 8 November 13

Logging

Fire and Forget

Friday 8 November 13

Fragen?

Friday 8 November 13

Sebastian Springersebastian.springer@mayflower.de

Mayflower GmbHMannhardtstr. 680538 MünchenDeutschland

@basti_springer

https://github.com/sspringer82

Friday 8 November 13