Error handling in JavaScript

67
Handle with care Fehlerbehandlung in JavaScript Friday 8 November 13

description

My Talk at

Transcript of Error handling in JavaScript

Page 1: Error handling in JavaScript

Handle with careFehlerbehandlung in JavaScript

Friday 8 November 13

Page 2: Error handling in JavaScript

WER BIN ICH?

• Sebastian Springer

• https://github.com/sspringer82

• @basti_springer

Friday 8 November 13

Page 3: Error handling in JavaScript

Friday 8 November 13

Page 4: Error handling in JavaScript

Was ist ein Fehler?

☠Friday 8 November 13

Page 5: Error handling in JavaScript

Was ist ein Fehler?

☠Whoops, this should not happen.

Friday 8 November 13

Page 6: Error handling in JavaScript

Fehlertypen

Friday 8 November 13

Page 7: Error handling in JavaScript

Fehlertypen

Friday 8 November 13

Page 8: Error handling in JavaScript

Fehlertypen

Friday 8 November 13

Page 9: Error handling in JavaScript

Fehlertypen

Friday 8 November 13

Page 10: Error handling in JavaScript

Fehlertypen

Friday 8 November 13

Page 11: Error handling in JavaScript

Fehlertypen

Friday 8 November 13

Page 12: Error handling in JavaScript

Eigene Fehler

throw new Error('An error occurred');

Friday 8 November 13

Page 13: Error handling in JavaScript

Eigene Fehler

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

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

Friday 8 November 13

Page 14: Error handling in JavaScript

Friday 8 November 13

Page 15: Error handling in JavaScript

Abfangen von Fehlern

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

Friday 8 November 13

Page 16: Error handling in JavaScript

Abfangen von Fehlern

try {

} catch (RangeError e) { }

Friday 8 November 13

Page 17: Error handling in JavaScript

Abfangen von Fehlern

try {

} catch (RangeError e) { }

Friday 8 November 13

Page 18: Error handling in JavaScript

Abfangen von Fehlern

try {

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

Friday 8 November 13

Page 19: Error handling in JavaScript

Callbacks

Friday 8 November 13

Page 20: Error handling in JavaScript

Fehler in CallbacksApplikation Asynchrone

Ausführung

Friday 8 November 13

Page 21: Error handling in JavaScript

Fehler in CallbacksApplikation Asynchrone

Ausführung

Friday 8 November 13

Page 22: Error handling in JavaScript

Fehler in CallbacksApplikation Asynchrone

Ausführung

Operation

Friday 8 November 13

Page 23: Error handling in JavaScript

Fehler in CallbacksApplikation Asynchrone

Ausführung

Operation

Friday 8 November 13

Page 24: Error handling in JavaScript

Fehler in CallbacksApplikation Asynchrone

Ausführung

Operation

☠☂ ☏☣☢

Friday 8 November 13

Page 25: Error handling in JavaScript

Fehler in CallbacksApplikation Asynchrone

Ausführung

Operation

Callback☠☂ ☏☣☢

Friday 8 November 13

Page 26: Error handling in JavaScript

Fehler in CallbacksApplikation Asynchrone

Ausführung

Operation

Callback☠☂ ☏☣☢

Friday 8 November 13

Page 27: Error handling in JavaScript

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

Friday 8 November 13

Page 28: Error handling in JavaScript

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

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

Friday 8 November 13

Page 29: Error handling in JavaScript

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

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

☠Friday 8 November 13

Page 30: Error handling in JavaScript

Friday 8 November 13

Page 31: Error handling in JavaScript

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

Friday 8 November 13

Page 32: Error handling in JavaScript

Friday 8 November 13

Page 33: Error handling in JavaScript

Fehler in Callbacks

var fs = require('fs');

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

Friday 8 November 13

Page 34: Error handling in JavaScript

Fehler in Callbacks

var fs = require('fs');

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

null

Friday 8 November 13

Page 35: Error handling in JavaScript

Fehler in Callbacks

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

Friday 8 November 13

Page 36: Error handling in JavaScript

Events

Friday 8 November 13

Page 37: Error handling in JavaScript

Error EventsSubject Observer

Friday 8 November 13

Page 38: Error handling in JavaScript

Error EventsSubject Observer

Friday 8 November 13

Page 39: Error handling in JavaScript

Error EventsSubject Observer

Friday 8 November 13

Page 40: Error handling in JavaScript

Error Events

on(‘error’, function...

Subject Observer

Friday 8 November 13

Page 41: Error handling in JavaScript

Error Events

☠☂ ☏☣☢

on(‘error’, function...

Subject Observer

Friday 8 November 13

Page 42: Error handling in JavaScript

Error Events

☠☂ ☏☣☢

on(‘error’, function...

trigger(‘error’, {...

Subject Observer

Friday 8 November 13

Page 43: Error handling in JavaScript

Error Events

☠☂ ☏☣☢

on(‘error’, function...

trigger(‘error’, {...

Subject Observer

Friday 8 November 13

Page 44: Error handling in JavaScript

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

Friday 8 November 13

Page 45: Error handling in JavaScript

Promises

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

(Martin Fowler)

Friday 8 November 13

Page 46: Error handling in JavaScript

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

Friday 8 November 13

Page 47: Error handling in JavaScript

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

Friday 8 November 13

Page 48: Error handling in JavaScript

Promises

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

Friday 8 November 13

Page 49: Error handling in JavaScript

Promises

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

Friday 8 November 13

Page 50: Error handling in JavaScript

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

Page 51: Error handling in JavaScript

Node.js Domain

Friday 8 November 13

Page 52: Error handling in JavaScript

Node domain

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

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

Friday 8 November 13

Page 53: Error handling in JavaScript

Node Domain

• error-Events

• Exceptions

Wird ausgeführt bei:

Friday 8 November 13

Page 54: Error handling in JavaScript

window.onerror

Friday 8 November 13

Page 55: Error handling in JavaScript

window.onerror

catch it all!

Friday 8 November 13

Page 56: Error handling in JavaScript

window.onerror

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

Friday 8 November 13

Page 57: Error handling in JavaScript

window.onerror

window.onerror

Code

Friday 8 November 13

Page 58: Error handling in JavaScript

und jetzt?

Friday 8 November 13

Page 59: Error handling in JavaScript

und jetzt?

Logging FTW!

Friday 8 November 13

Page 60: Error handling in JavaScript

Logging

Client Server

Friday 8 November 13

Page 61: Error handling in JavaScript

Logging

Client

☠☂ ☏☣☢

Server

Friday 8 November 13

Page 62: Error handling in JavaScript

Logging

Client

☠☂ ☏☣☢

ServerLog Message

Friday 8 November 13

Page 63: Error handling in JavaScript

Logging

Client

☠☂ ☏☣☢

ServerLog Message

Friday 8 November 13

Page 64: Error handling in JavaScript

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

Page 65: Error handling in JavaScript

Logging

Fire and Forget

Friday 8 November 13

Page 66: Error handling in JavaScript

Fragen?

Friday 8 November 13

Page 67: Error handling in JavaScript

Sebastian [email protected]

Mayflower GmbHMannhardtstr. 680538 MünchenDeutschland

@basti_springer

https://github.com/sspringer82

Friday 8 November 13